Подтвердить что ты не робот

Jvisualvm не перечисляет некоторые процессы Java

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

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

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

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

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

4b9b3361

Ответ 1

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

Обход

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

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

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

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

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

Примечания

  • Вероятно, не, чтобы поддерживать параметры JVM постоянно, поскольку они позволят любому подключиться к JVM через JMX.
  • Вы также можете добавить аутентификацию в JMX JVM-параметры, если хотите.

Ответ 2

Самый простой способ - выполнить jvisualvm как администратор (win: "run as administrator" ). Что не идеально, но работает. Все java-процессы видны тогда.