JVM崩溃产生了 hs_err_pidxxxx.log如何分析
  RuXuq8CpAyRj 2023年11月15日 43 0

hs_err_pid.log是JVM崩溃时产生的日志文件,包含了JVM崩溃时的线程栈信息、内存信息、CPU信息等,可以帮助我们分析JVM崩溃的原因。下面是分析hs_err_pid.log日志的步骤:

 1. 打开hs_err_pid.log文件,查看文件头部的信息,可以了解到JVM的版本、操作系统、JVM启动参数等信息。
 2. 查找“Current thread”或“Current Java thread”这一行,可以了解到JVM崩溃时正在执行的线程。
 3. 查找“Stack:”或“Java frames:”这一行,可以了解到线程栈信息,从上往下查看,可以了解到线程执行的过程,以及在哪一行代码出现了异常。
 4. 查找“VM Arguments:”这一行,可以了解到JVM的启动参数,可以检查是否有参数配置错误。
 5. 查找“Memory:”这一行,可以了解到JVM内存信息,包括堆内存、栈内存、元空间等信息,可以检查JVM内存是否配置合理。
 6. 查找“CPU:”这一行,可以了解到CPU信息,包括CPU型号、核数、频率等信息,可以检查是否存在CPU相关的问题。
 7. 查找“Native frames:”这一行,可以了解到JVM崩溃时正在执行的本地方法,可以检查是否存在本地方法的问题。
 8. 最后,根据日志中的信息,结合应用程序的代码和环境,分析JVM崩溃的原因,并进行相应的处理。
 需要注意的是,hs_err_pid.log日志文件中的信息比较复杂,需要有一定的Java虚拟机和操作系统相关知识才能进行分析。如果不确定如何分析日志文件,建议寻求Java开发人员的帮助。

在hs_err_pid.log日志文件中,Native frames:是指JVM崩溃时正在执行的本地方法栈信息,包括本地方法的名称、地址、库文件等信息。在Native frames:这一行下面的每一行都代表了一个本地方法的信息,每一行的开头都有一个字母表示本地方法的类型,其含义如下:
 - J: 表示本地方法是编译后的Java代码。
- j: 表示本地方法是解释执行的Java代码。
- Vv: 表示本地方法是JVM自身的代码。
- C: 表示本地方法是C或C++代码。
 通过这些信息,我们可以了解到JVM崩溃时正在执行的本地方法的类型,以及是哪个库文件中的本地方法,可以帮助我们更好地定位JVM崩溃的原因。需要注意的是,本地方法的调用是由Java程序发起的,而不是由JVM自身发起的,因此本地方法的问题可能是由Java程序中的代码问题引起的,而不一定是JVM本身的问题。 

 从日志中可以看出,JVM崩溃的位置在 `com.itextpdf.text.pdf.TrueTypeFontSubSet.assembleFont()` 方法内部,具体是在 `com.itextpdf.text.pdf.TrueTypeFontSubSet.assembleFont()` 方法调用结束后,返回到调用该方法的方法时发生的崩溃。在该方法内部,调用了 `com.itextpdf.text.pdf.TrueTypeFontSubSet.process()` 方法,该方法又调用了 `com.itextpdf.text.pdf.TtfUnicodeWriter.writeFont()` 方法,最终在 `com.itextpdf.text.pdf.FontDetails.writeFont()` 方法内部调用了 `com.itextpdf.text.pdf.PdfWriter.addSharedObjectsToBody()` 方法,而在该方法内部调用了 `com.itextpdf.text.pdf.PdfWriter.close()` 方法,最终导致了JVM崩溃。
 从日志中的Native frames可以看出,JVM崩溃时正在执行的本地方法是 `aci_CopyRight()` 方法,该方法属于JVM自身的代码,因此可能是由JVM本身的问题引起的。但是,从日志中的Java frames可以看出,JVM崩溃是在 `com.itextpdf.text.pdf.PdfWriter.close()` 方法内部发生的,因此也有可能是由Java程序中的代码问题引起的。
 需要进一步分析代码,定位JVM崩溃的具体原因。

 在 `com.itextpdf.text.pdf.PdfWriter.close()` 方法中,有可能会引发以下几种情况导致JVM崩溃:
 1. 内存泄漏:如果在 `com.itextpdf.text.pdf.PdfWriter.close()` 方法中未正确释放资源,可能会导致内存泄漏,最终导致JVM崩溃。
 2. 线程安全问题:如果在多线程环境下使用 `com.itextpdf.text.pdf.PdfWriter.close()` 方法,可能会出现线程安全问题,最终导致JVM崩溃。
 3. 代码逻辑错误:如果在 `com.itextpdf.text.pdf.PdfWriter.close()` 方法中存在代码逻辑错误,例如死循环、空指针异常等,可能会导致JVM崩溃。
 4. 资源不足:如果在 `com.itextpdf.text.pdf.PdfWriter.close()` 方法中需要打开大量文件或者占用大量内存,而系统资源不足,可能会导致JVM崩溃。
 需要根据具体的代码实现和环境情况,结合日志信息进行分析,才能准确地定位JVM崩溃的原因。

关于这次遇到的问题,如何解决思路 给大家参考哈

最终定位问题是文件并发读写,已经优化处理了。多个线程打开一个文件读写的时候 close方法报错异常导致的 jvm崩溃

方案是每次进入方法文件名字+uuid  使用后进行删除。


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月15日 0

暂无评论

推荐阅读
  2Vtxr3XfwhHq   2024年05月17日   55   0   0 Java
  Tnh5bgG19sRf   2024年05月20日   110   0   0 Java
  8s1LUHPryisj   2024年05月17日   46   0   0 Java
  aRSRdgycpgWt   2024年05月17日   47   0   0 Java
RuXuq8CpAyRj