Как подключить JMC (Java Mission Control) к удаленной JVM в Ubuntu?
Я могу подключиться к JMC к JVM, находясь в той же системе. Тем не менее, я хочу контролировать удаленный сервер. Как мне подключить мой локальный JMC к удаленной JVM?
4 ответа
На сервере {Ubuntu} отредактируйте /etc/hosts
файл
127.0.1.1 server-name
Заменить вышеуказанную строку этой строкой
<system-ip> server-name
Это все описано в документации:
1. Нажмите Справка-> Справка по управлению полетом Java.
2. Проверьте справку браузера JVM.
Для более подробной информации, проверьте:
http://docs.oracle.com/javase/7/docs/technotes/guides/management/agent.html
Сначала вам нужно включить внешний агент JMX на сервере. Это можно сделать, добавив соответствующий com.sun.management.jmxremote к флагам командной строки для JVM-сервера, к которому вы хотите подключиться. Вот простой пример набора системных свойств, которые можно использовать. Они отключают безопасность и аутентификацию, поэтому НИКОГДА не используйте это так в производстве:
-Dcom.sun.management.jmxremote.port=7091
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
Далее вы создаете пользовательское соединение в JMC. Это можно сделать, нажав кнопку "Создать пользовательское соединение" в браузере JVM:
В появившемся диалоге вы просто вводите хост и порт.
Если у вас возникли проблемы, сначала проверьте последнюю главу документации, прилагаемой к JMC (Часто задаваемые вопросы):
Если это не поможет, на форуме JMC есть более подробные ответы на часто задаваемые вопросы: https://community.oracle.com/message/11182417.
Моя среда - jboss 7.1 в Linux, я пытался подключить JMC к моему экземпляру jboss, изначально у меня возникли проблемы с отказом в соединении - после полутора дней копания удаленный JMC теперь работает для меня со следующими конфигами в 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"
Я смог увидеть JVM в VirtualBox (хост: Win10, гость: Ubuntu 20.04) после запуска целевой JVM со следующими флагами:
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