Может ли visualvm автоматически подключаться через JMX к удаленному процессу?

У меня есть Java-процесс, запущенный на удаленной машине, и процесс устанавливает некоторые mbeans. У меня также есть jstatd, работающий на этом компьютере, как тот же пользователь, что и процесс Java. (Mbeans можно настроить программным способом или использовать -Dcom.sun.management.jmxremote... и т.д., Это, похоже, не имеет значения).

VisualVM может подключиться к процессу jstatd, который он обнаруживает автоматически, но это означает, что я не получаю доступ к mbeans или, например, диаграмме истории CPU. В качестве альтернативы я могу создать явное соединение JMX, которое дает мне обычный набор полезных инструментов, но я хочу, чтобы приложению при назначении был назначен случайный порт JMX, эта конфигурация не может быть статичной.

Есть ли способ заставить VisualVM автоматически подключаться к моему процессу через JMX? Это потребовало бы автоматического обнаружения портов JMX, но я бы подумал, что jstatd может это сделать. Кто-нибудь знает о каких-либо плагинах для visualvm для автоматизации этого?

Ответы

Ответ 1

К сожалению, нет способа назначить случайный порт JMX удаленному приложению. Вы можете запустить удаленное приложение с помощью

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

и VisualVM сможет прочитать эту конфигурацию с помощью Jvmstat (предоставить jstatd) и автоматически открыть соединение JMX с вашим удаленным приложением. Поэтому вам необходимо назначить фиксированный порт для удаленного приложения (ов). После этого все будет работать нормально, и VisualVM автоматически подключится к вашему приложению через JMX (на самом деле он будет объединять данные из Jvmstat и JMX).