当 JVM 崩溃时,会在工作目录中创建堆转储文件(hs_err_pidXXXX.log)。我想知道是谁创建了这个文件。JVM 崩溃意味着它已经异常终止。所以它肯定不会创建这个文件。那么这个文件是如何创建的呢?
我们也可以控制这个文件中显示的信息。如果我想在一个文件(hs_err_pidXXXX.log)中同时进行线程转储和堆转储,可以吗?如果是怎么办?基本上我的首要任务是识别导致 JVM 崩溃的函数(或堆栈跟踪)并将其存储在创建的堆转储文件中。
许多操作系统允许进程为某些异常情况注册处理程序。例如在 UNIX 中有信号的概念。
所以有可能是JVM自己写日志。
您已经在崩溃时获得了堆转储。要另外获取线程转储,请使用以下 JVM 参数
-XX:OnOutOfMemoryError="kill -3 %p"
注意:这很可能会在不同的文件或控制台中创建线程转储。