Tomcat启动:A fatal error has been detected by the Java Runtime Environment(JVM Crash分析及相关资料)

本文记录了解决Tomcat启动时出现jvm fatal error的问题过程。错误源于JIT编译优化时触发JVM编译器BUG。通过排除特定Hibernate方法的编译优化,成功修复该问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

2013年1月10号注:

今天更新代码之后,突然出现一个问题:Tomcat启动时,总是会出现jvm fatal error错误导致tomcat无法正常启动,以下是错误信息:

#
# A fatal error has been detected by the Java Runtime Environment:
#
#  Internal Error (c1_Optimizer.cpp:271), pid=6048, tid=5404
#  guarantee(x_compare_res != Constant::not_comparable) failed: incomparable constants in IfOp
#
# JRE version: 6.0_29-b11
# Java VM: Java HotSpot(TM) Client VM (20.4-b02 mixed mode windows-x86 )
2013-01-10 13:47:34,671 INFO  hibernate.cfg.AnnotationBinder:419  -> Binding entity from annotated class: com.estone.www.spis.model.po.zd.sys.DPossession
2013-01-10 13:47:34,671 INFO  cfg.annotations.EntityBinder:422  -> Bind entity com.estone.www.spis.model.po.zd.sys.DPossession on table d_possession
2013-01-10 13:47:34,671 INFO  hibernate.cfg.AnnotationBinder:419  -> Binding entity from annotated class: com.estone.www.spis.model.po.zd.writ.DWritTemplate
2013-01-10 13:47:34,671 INFO  cfg.annotations.EntityBinder:422  -> Bind entity com.estone.www.spis.model.po.zd.writ.DWritTemplate on table d_writ_template
2013-01-10 13:47:34,671 INFO  hibernate.cfg.AnnotationBinder:419  -> Binding entity from annotated class: com.estone.www.spis.model.po.zd.writ.DWritType
2013-01-10 13:47:34,671 INFO  cfg.annotations.EntityBinder:422  -> Bind entity com.estone.www.spis.model.po.zd.writ.DWritType on table d_writ_type
# An error report file with more information is saved as:
# D:\Program Files\apache-tomcat-6.0.20\bin\hs_err_pid6048.log
#
# If you would like to submit a bug report, please visit:
#   http://java.sun.com/webapps/bugreport/crash.jsp
#


在网上搜寻好久,终于找到了类似错误,网上解释归结于:JIT在做编译优化的时候处理时出错,可能是触发了JVM的编译器的BUG导致的。幸好SUN(Oracle)提供了相关的文档说明,得以让我们解决了这个问题。 
文档地址:Troubleshooting System Crashes - Troubleshooting Guide for Java SE 6 with HotSpot VM 

在这里,导致本次错误的是这个方法:

org.hibernate.cfg.annotations.SimpleValueBinder.setType


解决办法:让jvm跳过该方法的编译优化 

1.如果是eclipse下启动服务,则在myeclipse-preference-java-installed jres 里面设置, 在 defalt vm arguments 填入下边的代码就可以了!如图:

代码:

-XX:CompileCommand=exclude,org/hibernate/cfg/annotations/SimpleValueBinder,setType

 

选择使用的JRE,,点击编辑edit

将上边代码粘贴到此处,OK

2.如果是直接通过startup 启动tomcat,则需要修改以下文件 Windows下,在文件/bin/catalina.bat,Unix下,在文件/bin/catalina.sh找到

set JAVA_OPTS=%JAVA_OPTS%  %LOGGING_CONFIG%  

修改为以下内容即可:

set JAVA_OPTS=%JAVA_OPTS% -XX:CompileCommand=exclude,org/hibernate/cfg/annotations/SimpleValueBinder,setType %LOGGING_CONFIG%

如图:


 

参考资料:感谢以下链接的朋友

http://seanhe.iteye.com/blog/905997

http://eric-flower.iteye.com/blog/1447080

http://sind.iteye.com/blog/1132459

 iLife's 博客Thinking in life_我和1988_优快云博客 

### 解决方案分析 当遇到 Nacos 启动时出现 `EXCEPTION_ILLEGAL_INSTRUCTION` 的问题时,通常表明 JVM 或其依赖的本地库遇到了不兼容的情况。以下是可能的原因以及解决方案: #### 可能原因 1. **硬件架构不匹配** 如果运行环境中的 CPU 架构与 JDK 编译目标不符,则可能导致非法指令错误。例如,在某些 ARM 或低功耗处理器上运行针对高性能 x86_64 优化的二进制文件可能会触发此问题[^1]。 2. **JDK 版本冲突** 使用了不适合当前操作系统的 JDK 版本也可能引发此类问题。尤其是不同版本之间的 JIT 编译器行为差异较大时,容易导致崩溃[^3]。 3. **第三方库损坏或缺失** 当应用程序加载外部动态链接库(DLL/so 文件)失败或者这些库本身存在问题时,也会抛出类似的致命错误消息[^2]。 4. **配置参数不当** 如引用提到的服务重启后无法正常工作可能是由于之前设置了一些特定于首次启动条件下的参数,在后续再次尝试连接数据库或其他资源未成功初始化前就执行业务逻辑造成的[^4]。 #### 推荐措施 ##### 方法一:验证并调整 JDK 安装包 确保所使用的 JDK 是官方发布的稳定版,并且与其操作系统平台完全适配。如果怀疑现有安装有问题可以重新下载最新对应版本替换旧版本。 ##### 方法二:修改启动脚本增加调试选项 通过编辑 nacos/bin/startup.sh 脚本来加入额外的日志记录功能以便更好地定位具体哪个部分出了差错: ```bash #!/bin/bash nohup java -Xlog:gc*:file=/tmp/gc.log:time,uptime,pid,tid,level,tags \ -XX:+HeapDumpOnOutOfMemoryError \ -Dnacos.standalone=true \ -jar /path/to/nacos-server/target/nacos-server.jar > nohup.out & ``` 上述命令片段增加了垃圾回收日志输出路径(-Xlog),并在发生内存溢出(OOM)事件时自动保存堆转储文件(-XX:+HeapDumpOnOutOfMemoryError)##### 方法三:清理残留数据重置状态 按照提示信息描述的现象来看,有可能是因为上次关闭过程中未能妥善释放所有占用资源而导致下次开启时报错。因此建议先停止正在运行实例(如果有),接着删除临时目录下相关内容后再试一次完整的冷启流程: ```shell rm -rf ./data/* ./stop.sh && sleep 5s && ./startup.sh -m standalone ``` 注意这里假设项目根目录存在名为"data"子文件夹用于存储持久化资料;实际操作需依据实际情况确认确切位置以免误删重要文档! --- ### 总结 综上所述,面对 Nacos 出现 Java 运行时期间检测到严重错误(`FATAL ERROR`)情况时,应优先排查基础软硬件设施一致性状况,同时借助增强型诊断工具收集更多上下文线索辅助判断根本诱因所在之处^[]^.
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值