一个使用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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?