Может ли visualvm автоматически подключаться через JMX к удаленному процессу? - PullRequest
11 голосов
/ 08 октября 2010

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

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

1 Ответ

13 голосов
/ 16 декабря 2010

К сожалению, нет способа назначить случайный порт 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).

...