OpenJDK7运行Tomcat偶发SIGBUS类型JVM致命错误问题求助
故障可能诱因梳理
- JDK版本已知缺陷:你使用的OpenJDK 7u181 + IcedTea 2.6.14版本在RHEL 6系列环境下存在已知的数组拷贝桩例程Bug,
StubRoutines::jbyte_disjoint_arraycopy相关逻辑处理未对齐内存时会触发SIGBUS,该类问题多数在升级到OpenJDK 7u191及以上版本、或切换到OpenJDK 8后即可消失。 - 硬件层面故障:SIGBUS错误的典型诱因包括物理内存颗粒损坏、交换分区所在磁盘存在坏块,当JVM访问被损坏的内存/磁盘交换数据时会触发总线错误,可通过memtest86工具检测物理内存、使用
badblocks命令检查磁盘坏道排查此类问题。 - 堆外内存越界破坏:如果部署的业务应用使用了JNI调用、sun.misc.Unsafe类操作堆外内存,或是依赖的第三方组件(如RPC框架、序列化工具、缓存客户端)存在堆外内存写越界问题,会破坏JVM内部数组的内存布局,后续执行数组拷贝逻辑时就会触发崩溃,可排查崩溃前是否有新功能上线、新增第三方依赖。
- 测试版操作系统缺陷:你使用的RHEL 6.10 Beta属于未正式发布的测试版本,内核虚拟内存管理模块存在未修复Bug的概率极高,尤其是tmpfs、页缓存相关的缺陷都可能触发JVM的SIGBUS错误,可查看
/var/log/messages中是否有同期的内核报错信息辅助验证。
补充排查建议:即便没有gdb调试符号,也可以先分析生成的
hs_error.log文件,文件中会记录崩溃时的Java线程栈、内存占用统计、加载的本地库列表等信息,可进一步缩小问题定位范围。
内容的提问来源于stack exchange,提问作者Sanchit
相关产品推荐
相关产品推荐

