【问题标题】:How is Heap dump file created after JVM crashJVM崩溃后如何创建堆转储文件
【发布时间】:2013-08-30 10:01:38
【问题描述】:

当 JVM 崩溃时,会在工作目录中创建堆转储文件(hs_err_pidXXXX.log)。我想知道是谁创建了这个文件。 JVM 崩溃意味着它已经异常终止。所以它肯定不会创建这个文件。那么这个文件是如何创建的呢?

我们也可以控制这个文件中显示的信息。如果我想将线程转储和堆转储都放在一个文件(hs_err_pidXXXX.log)中,这可能吗?如果是怎么办?基本上我的首要任务是识别导致 JVM 崩溃的函数(或堆栈跟踪)并将其存储在创建的堆转储文件中。

【问题讨论】:

  • "它肯定不会创建这个文件。"你肯定错了。

标签: java jvm-crash heap-dump


【解决方案1】:

许多操作系统允许进程为某些异常情况注册处理程序。例如在 UNIX 中有 concept of signals

所以有可能是JVM自己写日志。

【讨论】:

  • 这类似于我们可以用于信号处理的“java关闭挂钩”吗?
  • @Ankur 是的,类似但更深层次。
【解决方案2】:

您已经在崩溃时获得堆转储。要另外获取线程转储,请使用以下 JVM 参数

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

注意:这很可能会在不同的文件或控制台中创建线程转储。

【讨论】:

    猜你喜欢
    • 2011-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-26
    相关资源
    最近更新 更多