Sun JDK 能否在 JVM 崩溃时生成核心/堆转储文件?

Posted

技术标签:

【中文标题】Sun JDK 能否在 JVM 崩溃时生成核心/堆转储文件?【英文标题】:Can Sun JDK generate core/heap dump files when JVM crashes? 【发布时间】:2012-06-08 06:35:05 【问题描述】:

当 JVM 崩溃时,是否有生成核心/堆转储文件?因为这些文件通常非常有助于找出代码中的错误。

【问题讨论】:

由于欺骗而退出是不会崩溃的。 “throw new OutOfMemoryError()”能否生成转储文件?我试过了,但失败了。如果没有,您能否提供一种可以生成核心/堆转储文件的情况。非常感谢。 IBM JVM 可以通过编程方式被告知生成这些转储,然后您可以在 System.exit(0) 之前执行这些转储。我不知道独立于供应商的方式。 好的。我一分钟前试过。 throw new OutOfMemoryError() 无法生成转储文件。使用 -Xmx 限制内存空间并在代码中定义一个大数组可以生成堆转储。感谢您的帮助。 如果 jvm 崩溃并抛出 OutOfMemoryError 就可以了。 【参考方案1】:

使用以下 JVM 选项:

-XX:+HeapDumpOnOutOfMemoryError 
-XX:HeapDumpPath="/tmp"

JVM 会将堆的内容转储到指定目录的文件中。请注意,这仅在抛出 OutOfMemoryError 时发生,因为如果 JVM 由于其他原因而崩溃,则不需要转储。

编辑:“布尔选项使用 -XX:+ 打开并使用 -XX:- 关闭。” docs

【讨论】:

应该是 -XX:+HeapDumpOnOutOfMemoryError(带加号),因为减号实际上将其关闭【参考方案2】:

您可以使用-XX:HeapDump JVM options。

【讨论】:

以上是关于Sun JDK 能否在 JVM 崩溃时生成核心/堆转储文件?的主要内容,如果未能解决你的问题,请参考以下文章

我应该如何诊断和防止 JVM 崩溃?

JDK,JRE,JVM区别与联系

JDK,JRE,JVM 关系和概念

使用sun.misc.Cleaner或者PhantomReference实现堆外内存的自动释放

使用sun.misc.Cleaner或者PhantomReference实现堆外内存的自动释放

JDK JRE JVM