For some weird reason I am not able to connect using VisualVM
or jconsole
to a JMX.
The parameters used to start the VM to be monitored:
-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.port=1100
I checked, and I can telnet to this port, from both locally and remotely.
Still, VisualVM or jconsole are failing to connect, after spending some considerably time trying to.
REMOTE MACHINE with JMX (debian) java version "1.6.0_33" Java(TM) SE Runtime Environment (build 1.6.0_33-b03-424-11M3720) Java HotSpot(TM) 64-Bit Server VM (build 20.8-b03-424, mixed mode) MY WORKSTATION (OS X) java version "1.6.0_26" Java(TM) SE Runtime Environment (build 1.6.0_26-b03) Java HotSpot(TM) 64-Bit Server VM (build 20.1-b02, mixed mode)
What is the problem?
Remote JMX ConnectionsRight click anywhere in the blank area under the application tree and select Add JMX Connection. Provide the machine name and port number for a running JMX agent, that has been started with the appropriate system properties to allow remote management.
Enables the JMX remote agent and creates a remote JMX connector to listen through the specified port. By default, the SSL, password, and access file properties are used for this connector. It also enables local monitoring as described for the com.
The RMI registry tells JMX clients where to find the JMX RMI server port; information can be obtained under key jmxrmi . The RMI registry port is generally known as it is set through system properties at JVM startup.
Add -Djava.rmi.server.hostname = host ip
. Even i faced the same problem and this did the trick.
Addition of this -Djava.rmi.server.hostname = host ip
forces RMI service to use the host ip instead of 127.0.0.1
These are the steps that worked for me (Debian behind firewall on the server side was reached over VPN from my local Mac):
Check server public ip
ifconfig
Use JVM params:
-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=[jmx port] -Dcom.sun.management.jmxremote.local.only=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=[server ip from step 1]
Run application
Find process ID of the running java process
Check all ports used by JMX/RMI
netstat -lp | grep [pid from step 4]
Open all ports from step 5 on the firewall
Voila.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With