Среды исполнения Java на основе HotSpot генерируют только дамп в формате HPROF. В распоряжении разработчика имеется несколько интерактивных методов генерации дампов и один метод генерации дампов на основе событий.
Интерактивные методы:
- Использование Ctrl+Break: если для исполняющегося приложения установлена опция командной строки
-XX:+HeapDumpOnCtrlBreak
, то дамп формата HPROF генерируется вместе с дампом потока при наступлении событияCtrl+Break
илиSIGQUIT
(обычно генерируется с помощью kill -3), которое инициируется посредством консоли. Эта опция может быть недоступна в некоторых версиях. В этом случае можно попытаться использовать следующую опцию:-Xrunhprof:format=b,file=heapdump.hprof
- Использование инструмента jmap: утилита jmap, поставляемая в составе каталога
/bin/
комплекта JDK, позволяет запрашивать дамп HPROF из исполняющегося процесса. - Использование операционной системы: Для создания файла ядра можно воспользоваться неразрушающей командой gcore или разрушающими командами kill -6 или kill -11. Затем извлечь дамп кучи из файла ядра с помощью утилиты jmap.
- Использование инструмента JConsole. Операция
dumpHeap
предоставляется в JConsole как MBean-компонентHotSpotDiagnostic
. Эта операция запрашивает генерацию дампа в формате HPROF.
Метод на основе событий:
- Событие
OutOfMemoryError
: Если для исполняющегося приложения установлена опция командной строки-XX:+HeapDumpOnOutOfMemoryError
, то при возникновении ошибкиOutOfMemoryError
генерируется дамп формата HPROF. Это идеальный метод для «production» систем, поскольку он практически обязателен для диагностирования проблем памяти и не сопровождается постоянными накладными расходами с точки зрения производительности. В старых выпусках сред исполнения Java на базе HotSpot для этого события не устанавливается предельное количество дампов кучи в пересчете на одну JVM; в более новых выпусках допускается не более одного дампа кучи для этого события на каждый запуск JVM.