Как использовать VisualVM и JMX?

Я перепробовала все рецепты из книги, но сегодня ничего не получится ...

Я пытаюсь использовать VisualVM для профилирования моего Java-приложения, работающего на удаленном сервере, поэтому я искал в Google способы сделать это, и в итоге я получил следующее решение:

java -Dcom.sun.management.jmxremote \
  -Dcom.sun.management.jmxremote.port=9199 \
  -Dcom.sun.management.jmxremote.local.only=false \
  -Dcom.sun.management.jmxremote.authenticate=false \
  -Dcom.sun.management.jmxremote.ssl=false \
  -jar bin/felix.jar

Я думаю, запуск этого заставит меня запустить JMX, поэтому я могу увидеть, как он работает на 9199:

java      21947        root    9u  IPv6 1811434      0t0  TCP *:7192 (LISTEN)
java      26376        root   14u  IPv6 1844518      0t0  TCP *:9199 (LISTEN)

Более того, я могу проверить, что порт виден в сети:

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

Теперь, когда я пытаюсь открыть соединение в VisualVM на моем компьютере (который также может пинговать сервер jmx), происходит следующее:

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

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

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

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

РЕДАКТИРОВАТЬ: Я установил wirehark, чтобы знать, что происходит под капотом, и увидел это. Как только я добавляю удаленный IP-адрес в VisualVM, wirehark начинает обнаруживать эту повторяющуюся активность:

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

Однако, если я попытаюсь добавить новое JMX-соединение и попрошу его подключиться, Wireshark не захватит ни одного пакета этой попытки подключения.

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

Мне кажется, что VisualVM даже не пытается подключиться, несмотря на то, что выдает сообщение об ошибке «Не удается подключиться» ... !! Что, черт возьми, происходит?


person PedroD    schedule 07.05.2015    source источник
comment
Возможно, это помогает - убедитесь, что IP-адрес вашего хоста настроен правильно stackoverflow.com/questions/834581/remote-jmx- подключение   -  person pklndnst    schedule 07.05.2015
comment
Я пробовал это раньше :( Кажется, ничего не работает, несмотря на то, что порт виден в Интернете.   -  person PedroD    schedule 07.05.2015
comment
Из любопытства, есть ли брандмауэр между вашим рабочим столом и процессом, в котором включен JMX? Я знаю, что вы говорите, что порт 9199 открыт; однако для JMX требуется второй порт, который назначается случайным образом и не подлежит настройке. Это вызывает огромные проблемы при попытке использовать JMX через брандмауэр. Вероятно, не ваша проблема, просто выбросить его туда, чтобы посмотреть: blogs.oracle.com/jmxetc / entry /   -  person Michael    schedule 12.05.2015
comment
Я не знаю о наличии какого-либо брандмауэра. системные администраторы, отвечающие за сеть, говорят, что между ними нет брандмауэра. JMX должен быть близок к технологии DCOM. Как они могут превратить такие простые вещи в излишне спроектированные и неработающие решения ... черт ...   -  person PedroD    schedule 12.05.2015


Ответы (3)


Выполните следующие шаги.
1) Перейдите на удаленную машину, откройте перенаправление X11,
2) Установлен XMING в Windows
3) Запустите визуальную виртуальную машину на удаленной машине, графический интерфейс появится в вашем Windows xming.
4) Вместо IP используйте localhost и используйте тот же номер порта.

Если вышеуказанные шаги не работают, это означает, что что-то не так с конфигурацией.
Если вышеуказанные шаги работают нормально, перейдите в iptables и убедитесь, что порт 9199 открыт для внешнего мира. а также запустите программу с java -Djava.rmi.server.hostname=YOUR_IP

Дополнительные сведения см. По этой ссылке.

person prashant thakre    schedule 09.05.2015

Запустите службу, используя следующие параметры:

-Djava.rmi.server.hostname=193.163.XXX.XXX
-Dcom.sun.management.jmxremote 
-Dcom.sun.management.jmxremote.port=9199 
-Dcom.sun.management.jmxremote.authenticate=false 
-Dcom.sun.management.jmxremote.ssl=false

Затем вы можете использовать jvisualvm или jconsole только с адресом «193.163.XXX.XXX:9199».

person Uwe Meding    schedule 09.05.2015

Используйте следующие параметры JVM:

-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=<PORT> -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=<IP>

В VisualVM для подключения используйте следующее:

service:jmx:rmi:///jndi/rmi:/<IP>:<PORT>/jmxrmi

Надеюсь, это поможет.

person Arnab Biswas    schedule 07.05.2015
comment
Спасибо за предложение. Это не сработало, выдает точно такое же сообщение об ошибке. i.imgur.com/Cm46gpM.png i.imgur.com/yrTAFIv.png Порт 9199 по-прежнему доступен во всем мире. - person PedroD; 07.05.2015
comment
Вы использовали параметры Java, которые я предоставил? Он немного отличается от вашего: -Djava.rmi.server.hostname = ‹IP› - person Arnab Biswas; 07.05.2015
comment
да. java -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port = 9199 -Dcom.sun.management.jmxremote.authenticate = false -Dcom.sun.management.jmxremote.ssl = false -Djava.rmi. server.hostname = 193.136.102.224 -jar bin / felix.jar - person PedroD; 07.05.2015
comment
И в VisualVM: service: jmx: rmi: /// jndi / rmi: /193.136.102.224: 9199 / jmxrmi - person PedroD; 07.05.2015
comment
Если вы выполните ps -ef | grep jmx, вы можете увидеть свой процесс? Однако это будет работать только на unix сервере. Это просто для того, чтобы убедиться, что процесс начинается с перехвата JMX. Еще одно предложение, пожалуйста, не упоминайте IP в этом посте. Я обнаружил, что этот IP-адрес доступен через Интернет. - person Arnab Biswas; 07.05.2015
comment
Я не могу редактировать предыдущие комментарии, чтобы скрыть IP. Ответ на эту команду можно увидеть здесь: pastebin.com/z8DmHhyX Есть ли способ поместить код в эти Комментарии? - person PedroD; 07.05.2015
comment
Извините, что я не могу вам помочь. Не могли бы вы попробовать hawtio: hawt.io/getstarted. Короче говоря, он предоставляет JMX через HTTP. Я использовал для наблюдения за котом. Согласно документации, вам нужно сделать что-то вроде этого: java -jar hawtio-app-1.4.50.jar --port 8090 - person Arnab Biswas; 08.05.2015
comment
Я попробую. Спасибо! - person PedroD; 09.05.2015