我可以强制生成 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 崩溃日志文件吗?的主要内容,如果未能解决你的问题,请参考以下文章