我可以强制生成 JVM 崩溃日志文件吗?

Posted

技术标签:

【中文标题】我可以强制生成 JVM 崩溃日志文件吗?【英文标题】:Can I force generation of a JVM crash log file? 【发布时间】:2010-09-25 03:59:12 【问题描述】:

来自 JVM 崩溃的日志文件包含各种对调试有用的信息,例如加载的共享库和完整的环境。我可以强制 JVM 以编程方式生成其中之一吗?通过执行使其崩溃的代码或其他方式?或者以其他方式访问相同的信息?

【问题讨论】:

【参考方案1】:

您可以尝试抛出 OutOfMemoryError 并添加 -XX:+HeapDumpOnOutOfMemoryError jvm 参数。这是从 1.6 开始的新工具,McDowell 建议的其他工具也是如此。 http://blogs.oracle.com/watt/resource/jvm-options-list.html

【讨论】:

另见***.com/questions/5576672/… 另一个问题似乎是关于可以发送给 JVM 实现者的核心转储,例如IBM,而不是hs_err_pid*.log【参考方案2】:

查看JDK Development Tools,尤其是Troubleshooting Tools,用于转储堆、打印配置信息等。

【讨论】:

在这些工具中,jstack 似乎是最有前途的,其形式为jstack -l -F -m <pid>(如果进程未挂起,则不需要-F)。即使进程挂起,这也会为您提供混合模式(Java 和本机)和锁定同步器的所有线程堆栈。 或查看docs.oracle.com/javase/8/docs/technotes/guides/troubleshoot/… 了解 Oracle Java 8(之前的链接是 6 个,但内容可能差别不大)。【参考方案3】:

我很确定这可以使用 IBM JDK 来完成,因为前段时间我正在使用他们的堆栈分析器。强制转储的一种选择只会导致 outOfMemoryException。

这些工具可能会提供一些线索http://www.ibm.com/developerworks/java/library/j-ibmtools1/

【讨论】:

该链接似乎是关于一个仅供 IBM 客户使用的工具,我不是其中之一。【参考方案4】:

在 Ubuntu 20.04.1 LTS 上,我通过以下方式强制 jdk 11 进程上的核心转储

kill -4 <PID>

【讨论】:

以上是关于我可以强制生成 JVM 崩溃日志文件吗?的主要内容,如果未能解决你的问题,请参考以下文章

jvm crash 的崩溃日志详细分析及注意点

JVM 崩溃日志中的 BufferBlob::Interpreter 是啥意思?

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

JVM崩溃。如何获取错误日志或核心转储

JVM崩溃..如何获取错误日志或核心转储

Python - 创建有意义的崩溃日志/崩溃报告