一个使用kafka的Java项目,在Windows环境启动后不久出现进程崩溃的情况,反复验证偶发的能得到hs_err_pid.log致命错误日志,始终没有生成coredump。
通过错误日志确实看到了导致崩溃的线程堆栈跟kafka客户端有关,但栈顶显示当前在执行native本地代码,我们分别替换了kafka-clients的历史版本,问题依然存在。
查询了一下winncap364.dll文件:C:\Windows\System32\winncap364.dll,更新时间是2024-07-12,抱着侥幸心理从网上下载了一个该文件的历史版本并替换验证,jvm进程崩溃的问题消失了。
hs_err_pid.log文件包含信息如下:
- 崩溃事件简要分析
- 崩溃时刻正在运行的线程
- jvm里面的所有线程
- 内存的使用情况
- GC日志
- JVM内存映射
- jvm参数
- 服务器信息
栈帧的类型包括:
- C: 本地 C 帧
- j: 解释的 Java 帧
- V: 虚拟机帧
- v: 虚拟机生成的存根栈帧
- J: 其他帧类型,包括编译后的 Java 帧
线程类型包括:
- JavaThread java线程 代表正在执行java代码
- VMThread JVM线程
- CompilerThread 用来调用JITing,实时编译装卸class 。 通常,jvm会启动多个线程来处理这部分工作,线程名称后面的数字也会累加,例如:CompilerThread1
- GCTaskThread GC线程
- WatcherThread JVM 周期性任务调度的线程,是一个单例对象
- ConcurrentMarkSweepThread 表示一个并行GC的线程
线程状态说明:
- _thread_uninitialized:线程还没有创建,它只在内存原因崩溃的时候才出现
- _thread_new:线程已经被创建,但是还没有启动
- _thread_in_native:线程正在执行本地代码,一般这种情况很可能是本地代码有问题
- _thread_in_vm:线程正在执行虚拟机代码
- _thread_in_Java:线程正在执行解释或者编译后的 Java 代码
- _thread_blocked:线程处于阻塞状态
- …_trans:以_trans 结尾,线程正处于要切换到其它状态的中间状态
搜索winncap364.dll文件时,在网上也看到其他软件反馈该dll的类似兼容性问题:
https://blog.csdn.net/BOXonline1396529/article/details/133926665
标签:err,Java,log,thread,hs,线程,JVM,崩溃,日志 From: https://www.cnblogs.com/zhaoguan_wang/p/18687441