Не удалось подключить удаленный хост к 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.
Кто-нибудь может помочь мне с этим.
Спасибо.
Ответы
Ответ 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 в Удаленный хост, как показано на рисунке ниже и нажмите кнопку "ОК":
![введите описание изображения здесь]()