Jvisualvm не перечисляет некоторые процессы Java
Я хочу получить кучу кучи (предполагаемую утечку памяти) определенного Java-процесса. Однако, когда я запускаю инструмент jvisualvm, я не вижу ни одного из запущенных процессов Java.
У меня есть Google об этом и уже нашли пару статей, в которых говорится, что вы должны запускать процессы Java с помощью того же JDK, что вы запускаете инструмент jvisualvm, чтобы он мог их видеть. Однако, насколько я вижу, это уже так. Я делаю все локально (у меня есть удаленный доступ к машине).
Несколько вещей, которые следует учитывать:
- Процессы выполняются на сервере с брандмауэром Windows 2008
- Процессы выполняются с использованием переименованных версий исполняемого файла JDK
java.exe
- Насколько я вижу, процессы выполняются с использованием 1,6.0_18 JDK
- Один из запущенных процессов запускает реестр RMI
Я жду на виртуализированной копии сервера, чтобы я мог обходиться с ним (это производственный сервер). Но тем временем; любые идеи относительно того, почему я не вижу никаких процессов в jvisualvm (или jconsole, если на то пошло)?
Ответы
Ответ 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-процессы видны тогда.