Может ли 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).