jvisualvm не перечисляет определенные процессы Java - PullRequest
36 голосов
/ 17 февраля 2011

Я хочу получить дамп кучи (подозрение на утечку памяти) определенного процесса Java. Однако когда я запускаю инструмент jvisualvm, я не вижу ни одного из запущенных процессов Java.

У меня есть Google по этому поводу, и я уже нашел несколько статей, в которых говорится, что вы должны запускать процессы Java, используя тот же JDK, с которым вы запускаете инструмент jvisualvm, чтобы он мог их видеть. Однако, насколько я понимаю, это уже так. Я все делаю локально (у меня есть удаленный доступ к машине).

Несколько вещей, которые нужно учитывать:

  1. Процессы выполняются на сервере Windows 2008 с межсетевым экраном
  2. Процессы выполняются с использованием переименованных версий исполняемого файла JDK java.exe
  3. Насколько я вижу, процессы выполняются с использованием JDK 1.6.0_18
  4. Один из запущенных процессов запускает реестр RMI

Я жду виртуализированную копию сервера, чтобы можно было возиться с ней (это рабочий сервер). Но в то же время; есть идеи, почему я не вижу ни одного из процессов в jvisualvm (или jconsole в этом отношении)?

Ответы [ 2 ]

53 голосов
/ 21 февраля 2011

Ну, после того, как я провел небольшое исследование, похоже, что комментарий Питера был правильным. Поскольку процессы JVM были запущены другим пользователем (учетная запись NETWORK SERVICE, поскольку они запускались службой Windows), они не отображаются в jvisualvm.

Обход

Поскольку у меня есть доступ к конфигурации приложения, я нашел следующий обходной путь, который включает явное включение незащищенного JMX для целевой JVM:

  1. Добавьте следующие параметры JVM:

    -Dcom.sun.management.jmxremote.port=3333 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false

  2. Добавьте удаленный процесс в jvisualvm, используя JMX, щелкнув Файл -> Добавить соединение JMX. Вы можете подключиться к процессу, используя порт 3333. Очевидно, вы можете изменить порт, если хотите.

Ссылка на статью, объясняющая это чуть более подробно : http://download.oracle.com/javase/6/docs/technotes/guides/visualvm/jmx_connections.html

Примечания

  1. Вероятно, не - это хорошая идея для постоянного сохранения настроек JVM, поскольку они позволят любому подключаться к JVM через JMX.
  2. Вы также можете добавить аутентификацию к параметрам JVX JMX, если хотите.
2 голосов
/ 21 ноября 2017

Самый простой способ - выполнить jvisualvm от имени администратора (win: «запускать от имени администратора»). Что не идеально, но работает. Тогда все java процессы видны.

...