Как я могу анализировать файл .hprof?

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

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

Любые идеи?

Ответ 1

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

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

SELECT toString (firstName) FROM com.yourcompany.somepackage.User

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

Ответ 2

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

ex: jhat -port 7401 -J-Xmx4G dump.hprof

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

Ответ 3

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

Вам нужна Java 6+, чтобы полностью использовать Visual VM.

Ответ 4

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

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

Ответ 5

YourKit Java Profiler, похоже, справляется с ними.