了解 hs_err_pid<n>.log 文件

Posted

技术标签:

【中文标题】了解 hs_err_pid<n>.log 文件【英文标题】:Understanding a hs_err_pid<n>.log file 【发布时间】:2017-01-27 17:45:21 【问题描述】:

有关原始问题,请参阅here。

我正在编写 Java 服务,使用 Jetty 进行 Webserving 和 SQLite 进行数据库存储。来源可用here。

我发现,尽管该服务在我的笔记本电脑上稳定运行,但在部署到 EC2 实例时,它会在启动后 1 小时到 2 天之间的某个地方崩溃,并且输出中没有明显的错误消息。我在启动调用 (-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=...) 中添加了一些日志记录选项,并得到了this crashlog。

这是我第一次遇到这样的文件,乍一看似乎不是很明显它的哪个部分指的是实际错误,哪些部分只是提供上下文信息,所以我真的感谢任何理解它的好指南。特别是,它似乎正在尝试与我的项目中没有使用的 ZipFiles 进行交互。

This answer 链接到 blog 在答案 cmets 中为 -1 This answer 链接到一些 Oracle documentation,我通常会对此感到欣喜若狂,但它似乎是一个通用的调试指南——在其中看不到任何关于 hs_err 文件的内容(尽管在进一步阅读时可能会变得清晰)李> This result from Google 声称“无论你执行什么 Java 代码,JVM 都不应该崩溃。如果它发生了,那只是一个 JVM 错误。因此,请尝试向 Sun 记录一个包含所有详细信息的缺陷,希望他们会对此进行调查。”,其中听起来很专制 - 我认为我的小玩具项目不太可能发现 JVM 错误!

【问题讨论】:

【参考方案1】:

Java_java_util_zip_ZipFile_getEntry 中的崩溃通常是由并发访问 .zip 文件引起的,例如当一个打开的实例存在时,一个文件被覆盖。

详情请参阅JDK-8042197、JDK-8031691。

顺便说一句,至于原始问题,这里有一个presentation 对 JVM 故障转储分析。

【讨论】:

【参考方案2】:

查看崩溃日志,您解压的某些内容(jar 文件或 zip 文件)似乎导致了 JVM 崩溃。

如果在启动期间发生这种情况,请尝试将其添加到您的 JVM 命令行以查看它可能正在处理的文件。

java -verbose:class [more command line]

【讨论】:

以上是关于了解 hs_err_pid<n>.log 文件的主要内容,如果未能解决你的问题,请参考以下文章

JVM致命错误日志(hs_err_pid.log)分析

JVM致命错误日志(hs_err_pid.log)分析汇总

数据结构--查找

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

避免 jvm 捕获 SEGV 和 hs_err_pid 生成

怎么看hs_err_pid ###内的未来。日志文件?