Невозможно подключиться к удаленному JMX с помощью VisualVM, но все в порядке с JConsole

Я пытаюсь подключиться к удаленной службе JMX, используя VisualVM 1.3.8 с JRE 1.8.0. Точно такое же соединение с JConsole работает отлично, однако попытка использовать те же параметры с VVM просто зависает на этапе «Добавление сервисов». Я просмотрел журнал VVM, но там буквально ничего не записано.

Я также прочитал здесь в документе VVM remote JMX:

Примечание. Для получения и отображения информации о приложениях, запущенных на удаленном узле, на удаленном узле должна быть запущена утилита jstatd.

Это меня озадачивает, поскольку я могу установить удаленное JMX-соединение с помощью JConsole и, насколько я могу судить, jstatd не запущен на удаленном компьютере.

Кто-нибудь знает, является ли jstatd требованием только для VVM в качестве удаленного клиента JMX? Поскольку соединение JMX может быть выполнено с помощью JConsole между одними и теми же конечными точками клиента и сервера, тогда нет проблем с сетью / брандмауэром и т. Д.

Кроме того, я действительно озадачен, где еще искать подсказки?


person Stephen Hartley    schedule 17.06.2015    source источник
comment
Я только что попробовал тот же тест, используя jvisualvm из папки bin дистрибутива JDK 8, и соединение JMX там тоже отлично работает. Кто-нибудь знает, в чем разница между VisualVM, распространяемым java.net, и Oracle JDK? java.net сообщает: JDK 8 выпущен и доступен для загрузки здесь. Он содержит инструмент Java VisualVM на основе VisualVM 1.3.6. так что, возможно, моя проблема связана с версией VVM?   -  person Stephen Hartley    schedule 18.06.2015
comment
при локальном подключении можно использовать присоединенный api, который использует файловую систему (в Linux) без необходимости доступа к сети.   -  person Thorbjørn Ravn Andersen    schedule 05.08.2017


Ответы (1)


У меня была такая же проблема, когда я переключился с Java 7 на 8 при использовании SOCKS, когда я обновлял настройки прокси через VisualVM -> Tools -> Plugins -> Settings -> Proxy Settings. Однако мне удалось добиться следующих результатов:

  1. Запустите JVM со следующими параметрами:

-Dcom.sun.management.jmxremote.port=<JMX_PORT> -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false

Обратите внимание, что вы, очевидно, могли бы сделать что-то более безопасное, как с SSL, так и с аутентификацией.

  1. Настройте прокси-сервер SOCKS с вашего локального хоста на удаленный сервер:

ssh -D<SOCKS_PORT> -vvv -N <REMOTE_HOST>

  1. Выполните любую из этих команд на своем локальном хосте:

jconsole -J-DsocksProxyHost=localhost -J-DsocksProxyPort=<SOCKS_PORT> service:jmx:rmi:///jndi/rmi://<REMOTE_HOST:JMX_PORT>/jmxrmi jvisualvm -J-DsocksProxyHost=localhost -J-DsocksProxyPort=<SOCKS_PORT> --openjmx <REMOTE_HOST>

person bsravanin    schedule 03.08.2015
comment
Если кто-то задается вопросом относительно tomcat, эти строки должны быть в setenv.sh - person naoru; 18.08.2015