jvm crash 的原因及解決辦法

最近部署服務器時,總是會出現jvm fatal error 導致tomcat崩潰無法正常啓動,以下是錯誤信息 
Java代碼  收藏代碼
  1. # A fatal error has been detected by the Java Runtime Environment:  
  2. #  
  3. #  Internal Error (c1_Optimizer.cpp:271), pid=1196, tid=4412  
  4. #  guarantee(x_compare_res != Constant::not_comparable) failed: incomparable constants in IfOp  
  5. #  
  6. # JRE version: 6.0_25-b06  
  7. # Java VM: Java HotSpot(TM) Client VM (20.0-b11 mixed mode windows-x86 )  
  8. # If you would like to submit a bug report, please visit:  
  9. #   http://java.sun.com/webapps/bugreport/crash.jsp  
  10. #  
  11.   
  12. ---------------  T H R E A D  ---------------  
  13.   
  14. Current thread (0x01213800):  JavaThread "C1 CompilerThread0" daemon [_thread_in_native, id=4412, stack(0x179f0000,0x17a40000)]  
  15.   
  16. Stack: [0x179f0000,0x17a40000],  sp=0x17a3f554,  free space=317k  
  17. Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)  


這個問題在google上搜了很多文章,終於找到一片來自iteye網友的文章,和我遇到的問題基本類似,非常感謝。傳送門:http://seanhe.iteye.com/blog/905997 

問題的原因就在於 顯示JIT在做編譯優化的時候處理 某個方法時出錯。 
本利的錯誤是這個方法 
Java代碼  收藏代碼
  1. org.hibernate.cfg.annotations.SimpleValueBinder.setType  


解決辦法:讓jvm跳過該方法的編譯優化 

在jvm啓動參數中添加啓動參數 
Java代碼  收藏代碼
  1. -XX:CompileCommand=exclude,org/hibernate/cfg/annotations/SimpleValueBinder,setType  


如果是eclipse下啓動服務,則在eclipse-preference-java-installed jres 裏面設置, 
在 defalt vm arguments 填入上面的代碼就可以了。 


如果是直接通過startup 啓動tomcat,則需要修改以下文件 
Windows下,在文件/bin/catalina.bat,Unix下,在文件/bin/catalina.sh 
找到 
Java代碼  收藏代碼
  1. set JAVA_OPTS=%JAVA_OPTS%  %LOGGING_CONFIG%  


修改爲 
Java代碼  收藏代碼
  1. set JAVA_OPTS=%JAVA_OPTS% -XX:CompileCommand=exclude,org/hibernate/cfg/annotations/SimpleValueBinder,setType %LOGGING_CONFIG%  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章