什么会导致崩溃时无法创建hs_err_pid文件?

2022-09-03 14:29:04

我需要调查 Java 客户端应用程序的崩溃。它是Swing应用程序,在Windows上的Java SE 6 Update 23上的Java Web Start环境中运行。不幸的是,对于某些崩溃案例,hs_err_pid文件未创建。它不在桌面上,所以我在PC上搜索了它,但没有找到它(桌面上有一个旧的hs_err_pid文件,对于相同的应用程序,所以可以合理地假设新的也应该在那里创建)。日志中最终没有异常,因为它通常发生在JVM在Java异常上崩溃时,因此它看起来像是在创建hs_err_pid文件时应该导致的崩溃。

我是否需要配置某些内容才能使其正常工作?Dr. Watson 的配置会影响hs_err_pid文件的创建吗?

谢谢

我们配置了 Dr' Watson 并分析了核心转储文件,该文件是在应用再次崩溃后创建的。我看到的错误是“访问冲突”。从堆栈跟踪中,我能够看到崩溃是由我们使用的第三方的本机代码中的异常引起的。这足以将问题委托给他们。

底线:
1.JVM没有按预期处理某些Java崩溃,因此不会创建hs_err_pid文件。
2. 在这些情况下,配置操作系统以创建核心转储可能会有所帮助,因为 JVM 未处理的崩溃将由操作系统处理。在这种情况下,您将获得的信息较少,但仍然会有所帮助。


答案 1

如果崩溃是由于本机堆栈溢出而发生的(通常在应用程序尝试读/写堆栈保护页时导致 SIGSEGV),则在许多平台(例如 Linux)上不会生成hs_err_pid文件,因为如果堆栈空间不足,则创建文件的过程无法完成。


答案 2

请注意,仅当存在实际的 JVM 崩溃时,才会创建文件。hs_err_pid.log

如果您的应用程序“仅”由于某个未处理的异常而退出,则不会创建此类文件。

您确定崩溃是真正的JVM崩溃吗?


推荐