如何理解Java热点错误

时间:2009-05-12 05:40:14

标签: java jvm crash jvm-hotspot

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

指出相关网址将不胜感激。感谢。

3 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:0)

首先,查找看起来像“ntdll.dll + 0x2000”的最顶行。

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

否则,看看搜索特定行是否会在Google中出现问题,请记住同样的错误可能意味着一大堆事情。并查看DLL名称是否看起来像是可识别的东西,例如打印机驱动程序名称,图形驱动程序或可以跟踪特定呼叫的其他组件。无论该组件是什么,您都可以将其升级到固定版本,或者避免拨打相关电话。如果您不确定该组件是什么,它可能只是您需要升级的“JVM” - 至少升级到您所使用的任何版本的最新更新/次要版本nubmer可能是个好主意。

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

答案 2 :(得分:0)

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

关于第一个答案已经提到过这个网址,没关系