У меня есть рабочий сервер со следующим флагом: - XX: + HeapDumpOnOutOfMemoryError
Вчера вечером он сгенерировал файл java-38942.hprof, когда наш сервер обнаружил ошибку кучи. Оказывается, разработчики системы знали о флаге, но никак не могли получить от него полезную информацию.
Любые идеи?
Вы можете использовать JHAT , инструмент анализа кучи Java, предоставляемый по умолчанию вместе с JDK. Это командная строка, но запускается веб-сервер / браузер, который вы используете для проверки памяти. Не самый удобный для пользователя, но, по крайней мере, он уже установлен в большинстве мест, куда вы пойдете. Очень полезным представлением является ссылка «гистограмма кучи» в самом низу.
например:
jhat -port 7401 -J-Xmx4G dump.hprof
jhat
также может выполнять OQL «в эти дни» (нижняя ссылка «выполнить OQL»)источник
Вы также можете использовать HeapWalker из Netbeans Profiler или автономный инструмент Visual VM . Visual VM - хорошая альтернатива JHAT, поскольку она автономна, но ее гораздо проще использовать, чем JHAT.
Вам нужна Java 6+, чтобы полностью использовать Visual VM.
источник
jvisualvm.exe
вJAVASDK/bin
папкеПросто получите анализатор памяти Eclipse . Там нет ничего лучше, и это бесплатно.
JHAT можно использовать только для «игрушечных приложений»
источник
YourKit Java Profiler, похоже, справляется и с ними.
источник
Если вы хотите выполнить пользовательский анализ вашей heapdump, то есть:
Эта библиотека быстрая, но вам нужно будет написать свой код анализа на Java.
Из документов:
источник
Я лично предпочитаю VisualVM. Одна из функций, которые мне нравятся в VisualVM, - сравнение дампов кучи. Когда вы выполняете анализ дампа кучи, есть несколько способов выяснить, что вызвало сбой. Один из способов, которые я нашел полезными, - это сравнение здоровых и нездоровых дампов кучи.
Ниже приведены шаги, которые вы можете выполнить для этого:
ссылка: https://visualvm.github.io
источник