Не удается подключить удаленный хост к VisualVM - PullRequest
18 голосов
/ 24 октября 2011

Я новичок в Java и столкнулся с проблемой при подключении удаленного хоста к JVisualVM.

Я искал в Интернете и выполнил все шаги, упомянутые там, но все еще не могу решить проблему. Шаги, которые я выполнил:

  1. Я запустил jstatd на удаленном сервере, сначала создав файл jstatd.all.policy в $JAVA_HOME/bin. Файл содержал: grant codebase "file:${java.home}/../lib/tools.jar" { permission java.security.AllPermission;};

  2. Я начал Jstatd как jstatd -J-Djava.security.policy=jstatd.all.policy

  3. Я запустил приложение Java на удаленном хосте как:

    java -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9000 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false application_name
    
  4. Затем я запустился как экземпляр JVisualVM на моей локальной машине, и когда я добавил удаленный хост, он подключился, но я не смог увидеть ни один из процессов Java.

Может кто-нибудь помочь мне с этим.

Спасибо.

Ответы [ 5 ]

14 голосов
/ 25 февраля 2012

С аналогичными проблемами я столкнулся при подключении к серверу приложений Glassfish. Посмотрите решения, которые сработали для меня, так как они могут быть одинаковыми для Вас:

  • Попробуйте настроить приложение:

    -Djava.rmi.server.hostname = * Remote_Server_External_IP_Address *

Упомянутый IP-адрес должен быть внешним IP-адресом сервера (может показаться глупым, но у меня это сработало). Основной проблемой в моем случае было JMX, указывающее на локальный хост и циклы. В конфигурационных файлах точный IP-адрес должен быть установлен для удаленного хоста. Я описал это как «Проблема 2» в моем блоге: решение проблем с подключением
  • Если проблема с блокировкой брандмауэра, я рекомендую попробовать XMing с SSH-туннелем (который легко установить). Вот инструкция, если у вас возникли проблемы с ее настройкой:
    Удаленное использование VisualVM с Xming (мой блог) Самое большое преимущество использования XMing состоит в том, что он будет работать почти всегда, когда включен SSH. Вам просто нужно разместить файлы VisualVM на удаленном хосте и запустить его из командной строки. XWindow покажет окно VisualVM на вашем локальном компьютере.

  • Есть вероятность, что это проблема VisualVM - попробуйте использовать какой-нибудь другой инструмент, чтобы просто проверить, что не так. Я рекомендую JConsole . Он работает аналогично VisualVM, и я также описал детали в моем блоге

11 голосов
/ 17 сентября 2013

Вам необходимо запустить jstatd с дополнительной опцией, которая указывает на внешний IP-адрес или имя хоста сервера:

statd -J-Djava.security.policy=jstatd.all.policy -J-Djava.rmi.server.hostname=my_server_ip/hostname

Ответ основан на: https://java.net/projects/visualvm/lists/users/archive/2010-03/message/8

6 голосов
/ 25 октября 2011

Чтобы подключиться к удаленной виртуальной машине , вам необходимо запустить эту удаленную виртуальную машину с определенными параметрами :

java
 -Dcom.sun.management.jmxremote
 -Dcom.sun.management.jmxremote.port=9000
 -Dcom.sun.management.jmxremote.ssl=false
 -Dcom.sun.management.jmxremote.authenticate=false
class

После запуска виртуальной машины перейдите к VisualVM и выполните следующие действия:

  1. Файл -> Добавить JMX-соединение
  2. Введите: yourHostName: 9000 и нажмите OK
  3. Слева вы увидите добавленный JMXподключение, дважды щелкните по нему и все!

Подробнее о Платформе мониторинга и управления Java можно найти здесь .

1 голос
/ 29 мая 2017

Start jstatd in nohup на сервере, который необходимо отслеживать, и подключите VisualVM к порту jstatd, выполнив следующие шаги:

Шаг 1 : создайте start-jstatd.sh и скопируйте следующее содержимое:

nohup jstatd -p 1099 -J-Djava.security.policy=<(echo 'grant codebase "file:${java.home}/../lib/tools.jar" {permission java.security.AllPermission;};') &

Шаг 2: Дать исполняемый файл разрешению на файл:

$ chmod a+rwx start-jstatd.sh

Шаг 3: Запустить jstatd:

$ sh start-jstatd.sh

Шаг 4: Добавить удаленный хост в VisualVM:

enter image description here

Шаг 5: Добавьте JMX-соединение к Удаленному хосту , как показано на рисунке ниже, и нажмите кнопку OK: enter image description here

0 голосов
/ 03 ноября 2016

Вот шаги для этого:

  1. Запустите ejstatd на вашем удаленном хосте следующим образом (в папке ejstatd): mvn exec:java -Djava.rmi.server.hostname=<remote_host_name> -Dexec.args="-pr 1099 -ph 1100 -pv 1101" (используется для "jstatd"тип соединения) (укажите -Djava.rmi.server.hostname только в том случае, если имя хоста вашего удаленного хоста не совпадает с именем, которое вы видите в локальной сети)
  2. Запустите приложение Java с этими дополнительными параметрами Java: -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.port=1102 -Dcom.sun.management.jmxremote.rmi.port=1102 -Djava.rmi.server.hostname=<remote_host_name> (используется для соединения типа «JMX») (то же самое замечание, что и в предыдущем пункте для -Djava.rmi.server.hostname)
  3. Откройте эти 4 порта на удаленном хосте и сделайте их доступными для локального компьютера: 1099, 1100, 1101 и 1102
  4. Запустите JVisualVM
    1. Щелкните правой кнопкой мыши «Remote»> «Add Remote Host ...» и введите имя удаленного хоста в «Host name» (если вы не используете порт 1099, вы можете изменить это в «Расширенных настройках»)
    2. Щелкните правой кнопкой мыши на удаленном хосте, который вы только что создали> «Добавить соединение JMX ...»и введите «<remote_host_name>:1102» в поле «Соединение» и отметьте «Не требовать SSL-соединение»
    3. Ваш Java-процесс появится дважды: один из типа подключения "jstatd" и один из типа подключения "JMX".

Отказ от ответственности: яавтор инструмента с открытым исходным кодом ejstatd .

...