1. ホーム
  2. Server

Tomcatの起動。Java Runtime Environmentで致命的なエラーが検出されました(JVMのクラッシュ解析と関連情報)。

2022-02-23 11:31:40

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のコンパイラのバグを誘発した可能性がある。幸い、SUN(Oracle)が関連ドキュメントを提供してくれたので、問題を解決することができました。 
ドキュメントは以下の場所にあります。 システムクラッシュのトラブルシューティング - HotSpot VM搭載Java SE 6用トラブルシューティングガイド

ここで、このエラーを引き起こしているのは、このメソッドです。

org.hibernate.cfg.annotations.SimpleValueBinder.setType



回避策 jvmがメソッドのコンパイル最適化をスキップするようにする。 

1. eclipseでサービスを起動する場合、myeclipse-preference-java-installed jresに設定し、defalt vmの引数を以下のコードで埋めれば完了です。図にあるように

コード

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

使用するJREを選択し、editeditをクリックします。

上記のコードをここに貼り付けると、OK

2. 2. スタートアップから直接 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

 i ライフのブログ 人生に思うこと_私と1988年_CSDNブログ