我需要调查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处理的崩溃。在这种情况下,您将获得更少的信息,但它仍然有用。
答案 0 :(得分:8)
如果由于本机堆栈溢出而发生崩溃(通常在应用程序尝试读取/写入堆栈保护页面时导致SIGSEGV),则在许多平台(例如,Linux)上不会生成hs_err_pid文件,因为如果你的堆栈空间不足,则无法完成创建文件的进程。
答案 1 :(得分:6)
请注意,只有在实际发生JVM崩溃时才会创建hs_err_pid.log
个文件。
如果您的应用程序“仅”由于某处未处理的异常而退出,则不会创建此类文件。
您确定崩溃是真正的JVM崩溃吗?
答案 2 :(得分:3)
JDK 5 http://java.sun.com/j2se/1.5/pdf/jdk50_ts_guide.pdf
When a fatal error occurs an error log is created in the file
hs_err_pid.log(在哪里 进程的进程ID)。哪里 可能的文件是在。中创建的 该过程的工作目录。在 文件不能的事件 在工作目录中创建 (空间不足,许可 问题,或其他问题)然后文件 在临时目录中创建 对于操作系统。在Solaris上 和Linux的临时目录是 / tmp目录。在Windows上临时 目录由值指定 TMP环境变量,或者如果 没有定义,价值 TEMP环境变量。