当JVM崩溃时,会在工作目录中创建堆转储文件(hs_err_pidXXXX.log)。我想知道谁创建了这个文件。 JVM崩溃意味着它已异常终止。所以它肯定不会创建这个文件。那么这个文件是如何创建的?
我们也可以控制此文件中显示的信息。如果我想在一个文件(hs_err_pidXXXX.log)中同时进行线程转储和堆转储,是否可能?如果有,怎么样?基本上我的优先事项是识别导致JVM崩溃的函数(或堆栈跟踪)并将其存储在创建的堆转储文件中。
答案 0 :(得分:5)
许多操作系统允许进程为某些特殊条件注册处理程序。例如,在UNIX中有concept of signals。
因此JVM本身可能会写入日志。
答案 1 :(得分:0)
您已经在崩溃时获得堆转储。要另外获取线程转储,请使用以下JVM参数
-XX:OnOutOfMemoryError="kill -3 %p"
注意:这很可能会在不同的文件或控制台中创建线程转储。