Как создается файл дампа кучи после сбоя JVM

При сбое JVM в рабочем каталоге создается файл дампа кучи (hs_err_pidXXXX.log). Я хочу знать, кто создает этот файл. Сбой JVM означает аварийное завершение работы. Так что он точно не создаст этот файл. Так как же создается этот файл?

Также мы можем контролировать информацию, отображаемую в этом файле. Если я хочу иметь дамп потока и дамп кучи вместе в одном файле (hs_err_pidXXXX.log), возможно ли это? Если да, то как? По сути, мой приоритет — определить функцию (или трассировку стека), вызвавшую сбой JVM, и сохранить ее в созданном файле дампа кучи.


person Aniket Thakur    schedule 30.08.2013    source источник
comment
Он точно не создаст этот файл. Вы определенно ошибаетесь в этом.   -  person user207421    schedule 30.08.2013


Ответы (2)


Многие операционные системы позволяют процессу регистрировать обработчик для определенных исключительных условий. Например, в UNIX существует концепция сигналов.

Так что вполне возможно, что сама JVM пишет журнал.

person Henry    schedule 30.08.2013
comment
так это похоже на «ловушку отключения Java», которую мы можем использовать для обработки сигналов? - person Ankur Shanbhag; 30.08.2013
comment
@Ankur да, похоже, но на более глубоком уровне. - person Henry; 30.08.2013

Вы уже получаете дамп кучи при сбое. Чтобы дополнительно получить дамп потока, используйте следующий аргумент JVM

 -XX:OnOutOfMemoryError="kill -3 %p"

Примечание. Это, скорее всего, создаст дамп потока в другом файле или консоли.

person Anurag Kapur    schedule 30.08.2013