如何理解Java热点错误

问题描述 投票:0回答:3

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

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

java jvm crash jvm-hotspot
3个回答
5
投票

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

演示包含崩溃文件的详细说明,并带有一组示例,以便您可以练习。


0
投票

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

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

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

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


0
投票

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

好吧,第一个答案已经提到了这个网址,没关系

© www.soinside.com 2019 - 2024. All rights reserved.