如何理解 Java 热点错误

Posted

技术标签:

【中文标题】如何理解 Java 热点错误【英文标题】:How to understand Java Hotspot Errors 【发布时间】:2010-10-25 11:27:08 【问题描述】:

当 JVM 崩溃时,它会写入错误日志 hs_err_pid.log。我想找出导致 JVM 崩溃的原因?如何理解这些日志,是否在任何地方记录了该日志的排列方式。我试图在网上搜索但无济于事:-(

指出相关的 URL 将不胜感激。谢谢。

【问题讨论】:

【参考方案1】:

除非您调用本机代码 (JNI),否则代码中的任何内容都不会导致 JVM 崩溃;因此,该日志文件中的堆栈跟踪信息可能对大多数开发人员没有多大用处。这可能就是为什么它可能没有被记录(至少在外部)。 所以最好的办法可能是按照错误消息的建议提交错误报告。

但是,如果你真的想了解它,Kohsuke's Blog 有货。照常。 :)

【讨论】:

可能会发生其他可能导致 JVM 崩溃的邪恶事情。我已经看到它在同一个控制器上进行文件系统维护,但在不同的挂载点上。在停止 tomcat 之前替换现有的 jar 文件时,我已经看到了它。 (哎呀。)我能够通过 hs_err_pid.log 中的信息与 Sun Java 论坛上的人们推断出这两个原因。 我真的觉得我必须 -1 这个。它不仅链接到博客,而且博客根本没有给我任何有助于我发现程序崩溃原因的信息。因此,它只是没有回答这个问题。 :// 链接已失效。【参考方案2】:

首先,寻找看起来像“ntdll.dll+0x2000”的最上面一行。

如果热点出现在您的本机代码中(即 DLL 是您的代码之一),那么请了解如何说服您的编译器生成从 DLL 偏移量到行号的映射列表。显然,这可能意味着您需要使用新编译的 DLL 重新运行并等待问题再次出现。

否则,请查看搜索该特定行是否会在 Google 中显示某些内容,请记住,同样的错误可能意味着很多事情。并查看 DLL 名称是否看起来可以识别,例如打印机驱动程序名称、图形驱动程序或您可以追踪到特定调用的其他组件。无论该组件是什么,您都可以将其升级到固定版本,或者避免进行有问题的调用。如果您不确定该组件是什么,它可能只是您需要升级的“JVM”——至少升级到您使用的任何版本的最新更新/次要版本可能是个好主意。

过去,我还看到 JIT 编译器中的错误可以通过告诉它不要尝试编译有问题的特定方法来临时解决——我模糊地记得,在这些情况下,热点错误给出了一些关于它是哪种方法的线索(可能只是 Java 堆栈的转储),但我没有示例可以回忆细节。

【讨论】:

【参考方案3】:

这非常有用:http://weblogs.java.net/blog/kohsuke/archive/2009/02/crash_course_on.html

好的,第一个回答者已经提到了这个网址,没关系

【讨论】:

链接已失效。

以上是关于如何理解 Java 热点错误的主要内容,如果未能解决你的问题,请参考以下文章

《深入理解Java虚拟机》- JVM如何进行异常处理

WIN10 拨号连接下 如何开启移动热点

hbase Normalizer解决预分区错误,在不动数据的情况下完美解决热点问题

在导入JAVA项目缺少JAR包,但是代码里面没有错误提示?如何解决

Java 异常处理

试图理解 Java Out Of Memory 错误并捕获 throwable