jvisualvm подключается к удаленному jstatd, не показывая приложения

Я запустил jstatd на удаленном сервере (Ubuntu Server 14.04):

jstatd -J-Djava.security.policy=.jstatd.all.policy -J-Djava.rmi.server.logCalltrue -p 9099

и попробуйте подключиться к нему с помощью jvisualvm в Windows. Проверил netstat, соединение установлено, а на пульте логирует звонок:

Sep 11, 2015 12:48:51 PM sun.rmi.server.UnicastServerRef logCall
FINER: RMI TCP Connection(4)-10.82.199.0: [10.82.199.0: sun.rmi.registry.RegistryImpl[0:0:0, 0]: java.rmi.Remote lookup(java.lang.String)]
Sep 11, 2015 12:48:55 PM sun.rmi.server.UnicastServerRef logCall
FINER: RMI TCP Connection(4)-10.82.199.0: [10.82.199.0: sun.rmi.registry.RegistryImpl[0:0:0, 0]: java.rmi.Remote lookup(java.lang.String)]
Sep 11, 2015 12:48:59 PM sun.rmi.server.UnicastServerRef logCall
FINER: RMI TCP Connection(4)-10.82.199.0: [10.82.199.0: sun.rmi.registry.RegistryImpl[0:0:0, 0]: java.rmi.Remote lookup(java.lang.String)]

Все признаки говорят о том, что он работает. но, тем не менее, в jvisualvm не отображаются приложения:

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

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


person zorro    schedule 11.09.2015    source источник


Ответы (4)


Очевидно, VisualVM ожидает согласованное DNS-имя для сервера, к которому вы пытаетесь подключиться удаленно (в вашем случае Ubuntu Server 14.04). Следовательно, если вы указываете IP-адрес вместо DNS-имени для VisualVM, вы должны добавить следующее в строку запуска jstatd:

-J-Djava.rmi.server.hostname=<the IP address to your Ubuntu server here>

Кроме того я обнаружил, что указание параметра порта (-p 9099 в вашем случае) не поддерживается в некоторых выпусках VisualVM:

Известное ограничение: в этом выпуске VisualVM при запуске утилиты jstatd необходимо использовать порт и имя по умолчанию для jstatd, т. е. использование параметров -p и -n не поддерживается. Руководство по устранению неполадок VisualVM

В общем, вы должны попробовать запустить следующую строку jstatd на вашем сервере Ubuntu:

jstatd -J-Djava.security.policy=.jstatd.all.policy -J-Djava.rmi.server.hostname=10.82.83.117 -J-Djava.rmi.server.logCalltrue


Источники:

  1. http://www.catify.com/2012/09/26/remote-monitoring-with-visualvm/
  2. Это сработало для меня :)
person jaime.ferbec    schedule 19.10.2015
comment
добавление IP-адреса в качестве имени хоста решило проблему для меня. Спасибо за ответ. - person thaspius; 21.06.2016
comment
На тот случай, если у кого-то возникнут проблемы с приведенной выше командой, параметр -J-Djava.rmi.server.logCalltrue должен быть равен -J-Djava.rmi.server.logCalls=true. - person negora; 26.11.2018

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

Работает для меня отлично

person Harsh Maheswari    schedule 04.10.2017
comment
В JDK 11 tools.jar заменен модулями. Вы захотите исследовать jrt:/jdk.jstatd. - person Drakes; 24.01.2019
comment
Должно ли java.rmi.sver.hostname быть java.rmi.server.hostname ? - person Ron McLeod; 08.05.2020

В случае, если это поможет кому-то еще...

Я столкнулся с проблемами, когда ни jstatd, ни добавление простого соединения JMX в VisualVM не работали. Первый не выдавал никаких сообщений об ошибках, просто не отображал никаких приложений. Последнее дало бы мне сообщение об ошибке "Cannot connect to some-server:30648 using service:jmx:rmi:///jndi/rmi://some-server:30648/jmxrmi.

Попытка использовать отличный инструмент sjk-plus для ручного подключения к службе JMX привела к следующей ошибке:

$ java --add-opens java.base/jdk.internal.perf=ALL-UNNAMED \
       --add-opens jdk.attach/sun.tools.attach=ALL-UNNAMED \
       -Dsjk.breakCage=false \
       -jar scripts/sjk-plus-0.14.jar 
       mx --get --allMatched -b com.acme.some.package:name=* -f Count \
      -s some-server:30648
JMX Connection failed: java.rmi.ConnectException: Connection refused to host: 127.0.1.1; nested exception is: 
    java.net.ConnectException: Connection refused (Connection refused)

Вы видите это? 127.0.1.1, что там делает этот странный IP-адрес?

Это было вызвано определенной записью в файле /etc/hosts на сервере:

user@some-server:~$ cat /etc/hosts
127.0.0.1   localhost
127.0.1.1   some-server

# The following lines are desirable for IPv6 capable hosts
::1     localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

Изменение записи some-server в файле hosts и перезапуск процесса заставили его работать с sjk-plus, а также сделали его доступным для обнаружения с jstatd.

person Per Lundberg    schedule 10.01.2020

в джаве 11+

jstatd -J-Djava.rmi.server.logCalls=true \
    -J-Djava.security.policy=.jstatd.all.policy \
    -J-Djava.net.preferIPv4Stack=true \
    -J-Djava.security.policy=<(echo 'grant codebase "jrt:/jdk.jstatd" {permission java.security.AllPermission;}; grant codebase "jrt:/jdk.internal.jvmstat" {permission java.security.AllPermission;};')
person Ali Bagheri    schedule 03.08.2020