Как я могу анализировать файл .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, похоже, справляется с ними.