I am able to connect to JMC to the JVM while on the same system. However, I want to monitor a remote server. How do I connect my local JMC to my remote JVM?
In the server {Ubuntu} Edit the /etc/hosts
file
127.0.1.1 server-name
Replace above line with this line
<system-ip> server-name
It's all described in the documentation:
1. Click Help->Java Mission Control Help.
2. Check the JVM browser help.
For more detailed information, check out:
http://docs.oracle.com/javase/7/docs/technotes/guides/management/agent.html
First you need to enable the external JMX agent on the server. You do this by adding the relevant com.sun.management.jmxremote to the command line flags for the server JVM you wish to connect to. Here is a simple example of a set of system properties that can be used. They disable security and authentication, so NEVER use it like this in production:
-Dcom.sun.management.jmxremote.port=7091
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
Next you create a custom connection in JMC. You do this by clicking the "Create custom connection" button in the JVM browser:
In the upcoming dialog you simply enter the host and port.
If you run into trouble, first check the last chapter of the documentation included with JMC (Frequently Asked Questions):
If that does not help, the JMC Forum has a more extensive FAQ: https://community.oracle.com/message/11182417#11182417.
-Djava.rmi.server.hostname=<ip>
–
Fere -Djava.rmi.server.hostname=localhost
and -Dcom.sun.management.jmxremote.rmi.port=[...]
is needed to let the client access remote RMI-objects through the tunnel using a known port instead of a random one. –
Powe My environment is jboss 7.1 in Linux, was trying to connect JMC to my jboss instance, initially I got problems with connection refused - after a day and half of digging, remote JMC works for me now, with the following configs in standalone.conf:
JBOSS_MODULES_SYSTEM_PKGS="org.jboss.byteman,org.jboss.logmanager"
JAVA_OPTS="$JAVA_OPTS -Djboss.modules.system.pkgs=$JBOSS_MODULES_SYSTEM_PKGS"
JAVA_OPTS="$JAVA_OPTS -Djava.util.logging.manager=org.jboss.logmanager.LogManager"
JAVA_OPTS="$JAVA_OPTS -Xbootclasspath/p:/apps/jboss-as-7.1.1.Final/modules/org/jboss/logmanager/main/jboss-logmanager-1.2.2.GA.jar"
JAVA_OPTS="$JAVA_OPTS -Xbootclasspath/p:/apps/jboss-as-7.1.1.Final/modules/org/jboss/logmanager/log4j/main/jboss-logmanager-log4j-1.0.0.GA.jar"
JAVA_OPTS="$JAVA_OPTS -Xbootclasspath/p:/apps/jboss-as-7.1.1.Final/modules/org/apache/log4j/main/log4j-1.2.16.jar"
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote=true"
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.port=7091"
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.rmi.port=7091"
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.authenticate=false"
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.ssl=false"
JAVA_OPTS="$JAVA_OPTS -XX:+UnlockCommercialFeatures"
JAVA_OPTS="$JAVA_OPTS -XX:+FlightRecorder"
-Dcom.sun.management.jmxremote.rmi.port=[...]
which is needed in case of firewalls, SSH-tunnelling etc., because without it random ports are used by RMI to provide remote objects which clients need to access. -Djava.rmi.server.hostname=[...]
might be necessary as well. –
Powe I was able to see a JVM within VirtualBox (Host: Win10, Guest: Ubuntu 20.04) after running the target JVM with following flags:
java -XX:+FlightRecorder \
-Dcom.sun.management.jmxremote.port=1101 \
-Dcom.sun.management.jmxremote \
-Dcom.sun.management.jmxremote.authenticate=false \
-Dcom.sun.management.jmxremote.ssl=false \
MyApp
In the server {Ubuntu} Edit the /etc/hosts
file
127.0.1.1 server-name
Replace above line with this line
<system-ip> server-name
© 2022 - 2024 — McMap. All rights reserved.