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 崩溃时生成核心/堆转储文件?的主要内容,如果未能解决你的问题,请参考以下文章
使用sun.misc.Cleaner或者PhantomReference实现堆外内存的自动释放