Как мне проанализировать файл .hprof? - PullRequest
197 голосов
/ 09 октября 2008

У меня работает рабочий сервер со следующим флагом: - XX: + HeapDumpOnOutOfMemoryError

Прошлой ночью он сгенерировал файл java-38942.hprof, когда наш сервер обнаружил ошибку кучи. Оказывается, что разработчики системы знали о флаге, но никак не могли получить от него полезную информацию.

Есть идеи?

Ответы [ 6 ]

189 голосов
/ 09 октября 2008

Если вам нужен довольно продвинутый инструмент для серьезного поиска, посмотрите на проект Memory Analyzer на Eclipse, предоставленный им SAP.

Некоторое из того, что вы можете сделать, невероятно хорошо для обнаружения утечек памяти и т. Д., Включая запуск формы ограниченного SQL (OQL) для объектов в памяти, т.е.

ВЫБРАТЬ toString (firstName) ИЗ com.yourcompany.somepackage.User

Абсолютно блестящий.

58 голосов
/ 09 октября 2008

Вы можете использовать JHAT , инструмент анализа кучи Java, предоставляемый по умолчанию вместе с JDK. Это командная строка, но запускается веб-сервер / браузер, который вы используете для проверки памяти. Не самый удобный для пользователя, но, по крайней мере, он уже установлен в большинстве мест, куда вы пойдете. Очень полезным представлением является ссылка «гистограмма кучи» в самом низу.

например: jhat -port 7401 -J-Xmx4G dump.hprof

jhat также может выполнять OQL "в эти дни" (нижняя ссылка "выполнить OQL")

32 голосов
/ 09 октября 2008

Вы также можете использовать HeapWalker из Netbeans Profiler или Visual VM автономный инструмент. Visual VM - хорошая альтернатива JHAT, поскольку она автономна, но ее гораздо проще использовать, чем JHAT.

Для полноценного использования Visual VM требуется Java 6+.

11 голосов
/ 09 октября 2008

Просто получите Eclipse Memory Analyzer . Там нет ничего лучше, и это бесплатно.

JHAT можно использовать только для «игрушечных приложений»

7 голосов
/ 02 ноября 2010

YourKit Java Profiler, кажется, обрабатывает их тоже.

2 голосов
/ 06 июня 2018

Если вы хотите выполнить пользовательский анализ heapdump, тогда есть:

Эта библиотека быстрая, но вам нужно будет написать код анализа на Java.

Из документов:

  • Не создает никаких временных файлов на диске для обработки дампа кучи
  • Может работать напрямую с сжатыми дампами кучи GZ
  • Обозначение HeapPath
...