Подтвердить что ты не робот

Не удалось подключить удаленный хост к VisualVM

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

Я искал Интернет и следил за всеми описанными здесь шагами, но до сих пор не могу решить проблему. Следующие шаги были следующими:

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

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

  • Я запустил приложение 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
    
  • Затем я начал как экземпляр JVisualVM на моем локальном компьютере, и когда я добавил удаленный узел, он подключился, но я не смог увидеть какой-либо из процессов Java.

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

Спасибо.

4b9b3361

Ответ 1

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

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

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

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

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

Ответ 2

Вам нужно запустить 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

Ответ 3

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

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 и выполните следующие действия:

  • Файл → Добавить соединение JMX
  • Введите: yourHostName: 9000 и нажмите OK
  • Слева у вас будет добавленное соединение JMX, дважды щелкните по нему и его!

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

Ответ 4

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

  • Запустите 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, если имя хоста вашего удаленного узла не совпадает с именем, которое вы видите в локальной сети).
  • Запустите приложение 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)
  • Откройте эти 4 порта на удаленном хосте и сделайте их доступными для вашей локальной машины: 1099, 1100, 1101 и 1102
  • Запустить JVisualVM
    • Щелкните правой кнопкой мыши по "Remote" > "Добавить удаленный хост..." и введите имя удаленного хоста в "Имя хоста" (если вы не используете порт 1099, вы можете изменить это в поле "Дополнительные настройки" )
    • Щелкните правой кнопкой мыши на удаленном хосте, который вы только что создали > "Добавить соединение JMX...", и введите "<remote_host_name>:1102" в "Подключение" и установите флажок "Не требуется SSL-соединение"
    • Ваш Java-процесс появится дважды: один из типа соединения "jstatd" и один из типа соединения "JMX".

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

Ответ 5

Начать jstatd в 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:

введите описание изображения здесь

Шаг 5: Добавьте JMX Connection в Удаленный хост, как показано на рисунке ниже и нажмите кнопку "ОК": введите описание изображения здесь