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

2013年1月10号注:

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

[plain]  view plain  copy
 print ?
  1. #  
  2. # A fatal error has been detected by the Java Runtime Environment:  
  3. #  
  4. #  Internal Error (c1_Optimizer.cpp:271), pid=6048, tid=5404  
  5. #  guarantee(x_compare_res != Constant::not_comparable) failed: incomparable constants in IfOp  
  6. #  
  7. # JRE version: 6.0_29-b11  
  8. # Java VM: Java HotSpot(TM) Client VM (20.4-b02 mixed mode windows-x86 )  
  9. 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  
  10. 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  
  11. 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  
  12. 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  
  13. 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  
  14. 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  
  15. # An error report file with more information is saved as:  
  16. # D:\Program Files\apache-tomcat-6.0.20\bin\hs_err_pid6048.log  
  17. #  
  18. # If you would like to submit a bug report, please visit:  
  19. #   http://java.sun.com/webapps/bugreport/crash.jsp  
  20. #  

在网上搜寻好久,终于找到了类似错误,网上解释归结于:JIT在做编译优化的时候处理时出错,可能是触发了JVM的编译器的BUG导致的。幸好SUN(Oracle)提供了相关的文档说明,得以让我们解决了这个问题。 
文档地址:http://www.oracle.com/technetwork/java/javase/crashes-137240.html#gbyzu 

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

[java]  view plain  copy
 print ?
  1. org.hibernate.cfg.annotations.SimpleValueBinder.setType  

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

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

代码:

[plain]  view plain  copy
 print ?
  1. -XX:CompileCommand=exclude,org/hibernate/cfg/annotations/SimpleValueBinder,setType  

 

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

上边代码粘贴到此处,OK


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

[plain]  view plain  copy
 print ?
  1. set JAVA_OPTS=%JAVA_OPTS%  %LOGGING_CONFIG%    
修改为以下内容即可:

[plain]  view plain  copy
 print ?
  1. 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



by:http://blog.csdn.net/fei1502816/article/details/8489613

### 回答1: JNA是Java Native Access的缩写,是一种Java的库,用于访问操作系统本地功能的接口。当我们使用JNA时,有时候会遇到由Java运行时环境检测到的致命错误。 这种错误通常表示在使用JNA时,Java运行时环境发现了一个严重的问题,导致程序无法继续执行。这些错误通常与操作系统的兼容性问题、库文件的版本不匹配或者内存溢出等有关。 要解决这个问题,可以尝试以下几个方法: 1. 检查JNA的版本:确保使用的JNA版本与操作系统和其他依赖的库文件版本是兼容的。可以尝试升级或降级JNA版本来解决兼容性问题。 2. 检查库文件:确保所使用的库文件与JNA版本和操作系统兼容。确保库文件没有损坏或者缺失。 3. 增加内存:如果错误是由于内存溢出引起的,可以尝试增加Java虚拟机的内存限制。可以通过修改JVM参数来增加内存限制。 4. 调试错误:使用调试工具来分析错误的原因。可以使用Java的调试工具、日志记录或打印错误信息,以帮助定位问题所在。 5. 尝试其他解决方案:如果以上方法都无法解决问题,可以尝试使用其他类似的库或者其他方式实现所需的功能。 希望以上方法能够帮助解决使用JNA时出现的致命错误。 ### 回答2: 该错误是由Java运行时环境检测到的致命错误。它通常发生在Java应用程序运行过程中,可能由于多种原因导致。一些常见的原因可能包括:内存问题、编码问题、依赖项冲突或损坏等。 首先,内存问题可能是导致此错误的原因之一。如果应用程序使用的内存超过了Java虚拟机(JVM)设置的最大内存限制,则可能会引发致命错误。这可能需要重新评估应用程序的内存需求并相应地调整JVM的内存设置。 其次,编码问题可能导致此错误。如果应用程序中存在错误的代码或代码逻辑错误,可能会导致运行时错误。在这种情况下,需要对代码进行仔细检查和调试,以查找并修复潜在的问题。 依赖项冲突或损坏也可能是导致该错误的原因。如果应用程序的依赖项之间存在冲突或其中一个依赖项已损坏,则可能会导致运行时错误。在这种情况下,可能需要重新安装或更新相关的依赖项,并确保它们与应用程序的版本兼容。 解决这个问题的方法包括:查看错误的详细信息和堆栈跟踪,以了解具体的错误原因;检查应用程序的内存使用情况,以确保不超过JVM设置的最大内存限制;审查应用程序的代码并进行调试,查找潜在的编码问题;检查应用程序的依赖项并确保它们与应用程序兼容和完整。 总之,JNA a fatal error has been detected by the Java runtime environment错误是Java应用程序运行过程中的致命错误,可能由内存问题、编码问题、依赖项冲突或损坏等原因导致。解决该错误需要仔细检查和调试应用程序,同时对相关的配置和依赖项进行评估和修复。 ### 回答3: "jna a fatal error has been detected by the java runtime environment" 是Java运行时环境检测到致命错误的异常信息。 当程序在运行过程中出现无法恢复的错误时,Java运行时环境会报告此异常信息。这个错误可能包含有关错误的详细信息,例如错误的原因、导致错误的代码行和错误发生的时间。这种错误可能会导致程序崩溃或无法正常运行。 出现这种错误的原因可能是多方面的,例如内存溢出、资源不足、文件损坏等等。解决此问题的方法也因问题的具体原因而异。 首先,我们可以检查程序的内存使用情况。如果发现程序在运行过程中占用过多内存,可能需要优化代码或增加系统内存。可以使用Java内存分析工具来识别内存泄漏或者大对象的存在。 其次,我们可以检查代码中是否存在资源未释放的问题。例如文件、数据库连接等资源应该在使用完后及时释放。可以使用try-finally或try-with-resources语句块来确保资源的正确关闭。 最后,如果程序依赖于某个外部库或框架,可以尝试升级或修复该库的版本。有时候错误可能是由于库的bug引起的,升级到新的版本可能会修复这些问题。 总之,解决"jna a fatal error has been detected by the java runtime environment"的错误需要仔细分析错误信息和排查相关代码,并针对具体问题采取相应的解决措施。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值