Eclipse Memory Analyzer (MAT): не показывает запущенные в данный момент процессы
Я пытаюсь проанализировать утечку памяти в одной из моих программ Java (которая использует Swing), поэтому я скачал Eclipse MAT.
Что я сделал до сих пор:
- Запустите программу из Eclipse, нажав кнопку "Выполнить".
- Переключился на перспективу анализа памяти
- Выберите "Получить дамп кучи с локально работающей виртуальной машины" во время работы программы.
И это показывает, что нет запущенных процессов. В основном это выглядит так:
Изображение отсюда: MAT: Eclipse не показывает запущенный процесс
Согласно большинству ответов о SO, вам необходимо настроить провайдера дампа jmap HPROF, установив для его параметра значение -jdkhome: [корневой файл вашей установки jdk].
Я сделал это И все же я до сих пор не могу найти какие-либо запущенные процессы. Если это имеет значение, я установил JRE вместе с JDK, а не отдельно.
2 ответа
Если вам нужен дамп кучи, то вы можете использовать%JAVA_HOME%/bin/jvisualvm.exe (поставляется с JDK), чтобы получить дамп кучи вашего процесса. Затем вы можете проанализировать его с помощью MAT, jvisualvm или любого другого инструмента.
Итак, очевидно, что это была более глубокая, более серьезная проблема, связанная с разрешениями папок в Windows.
В соответствии с этим существуют две причины, по которым локальные приложения могут не обнаруживаться:
Решение: это может произойти в системах Windows, это вызвано неверно настроенной технологией jvmstat, используемой для обнаружения запущенных приложений. Есть две возможные причины:
Недостаточно разрешений для папки %TMP%\hsperfdata_username - убедитесь, что вы можете создать файл в каталоге и в конечном итоге обновить разрешения для полного доступа к папке. В качестве альтернативы вы можете просто заново создать папку, которая должна автоматически устанавливать правильные права доступа. Посмотрите эту ветку forum.sun.com для более подробной информации.
Наличие папки %TMP%\hsperfdata_username на диске FAT - по умолчанию jvmstat не работает на дисках FAT из-за ограничений безопасности. Вы можете обойти проверку безопасности, установив флаг -XX:+PerfBypassFileSystemCheck для VisualVM и отслеживаемого приложения. См. Ошибку JDK #5042659 для более подробной информации.
Это потому, что (в соответствии с этой веткой, заархивированной выше):
Вы не возражаете против того, чтобы cd'*** обратился к каталогу, в котором определен TMP, и посмотрите, есть ли каталог с именем hsperfdata_, где находится ваш логин. Это каталог, где отображаются инструментальные буферы (как файлы с общей памятью). Каждый раз, когда запускается процесс Java, он должен создать файл в этом каталоге.
Итак, из этого я понимаю, что Java должна была записать файл в %TMP%\hsperfdata_<username>
папка. Файл помог анализаторам памяти обнаружить процессы Java. Отсутствие соответствующих разрешений означало, что файл не мог быть записан, а анализаторы памяти не могли обнаружить процессы Java.
Таким образом, исправление должно было просто дать соответствующие разрешения для этой конкретной папки.
Для меня я считаю, что MAT поворачивает ошибкуorg.eclipse.mat.SnapshotException: Error getting Java processes list with 'jps'. Try to configure a JDK for the HPROF jmap provider
в пути
MemoryAnalyzer-1.10.0.20200225-win32.win32.x86_64\mat\workspace\.metadata\.log
Проверить jps: открыть выигрыш
cmd
и введите
jps
return jps не существует.
Настроить путь
jps
в окружающую среду.