(現在最新の) tomcat 6.0.24で Web アプリケーションを実行しているときに (現在最新の) jdk 1.6.0.18 が予期せずクラッシュしました。 600万ページビュー/日)。これは RHEL 5.2 (Tikanga) 上にあります。
クラッシュ レポートはhttp://pastebin.com/f639a6cf1にあり、クラッシュの一貫した部分は次のとおりです。
- SIGSEGV がスローされています
- libjvm.so で
- eden スペースは常に満杯 (100%)
JVM は次のオプションで実行されます。
CATALINA_OPTS="-server -Xms512m -Xmx1024m -Djava.awt.headless=true"
また、 http://memtest.org/を使用して 48 時間 (メモリ全体の 14 パス)、エラーなしでハードウェアの問題についてメモリをテストしました。
GC の傾向やスペースの枯渇を検査できるようにしまし-verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps
たが、疑わしいものは何もありません。GC とフル GC は予測可能な間隔で発生し、ほぼ常に同じ量のメモリ容量を解放します。
私のアプリケーションは、ネイティブ コードを直接使用していません。
次にどこを見るべきかについてのアイデアはありますか?
編集 - 詳細情報:
1) この JDK にはクライアント vm がありません。
[foo@localhost ~]$ java -version -server
java version "1.6.0_18"
Java(TM) SE Runtime Environment (build 1.6.0_18-b07)
Java HotSpot(TM) 64-Bit Server VM (build 16.0-b13, mixed mode)
[foo@localhost ~]$ java -version -client
java version "1.6.0_18"
Java(TM) SE Runtime Environment (build 1.6.0_18-b07)
Java HotSpot(TM) 64-Bit Server VM (build 16.0-b13, mixed mode)
2) O/S の変更はできません。
3) 問題を隠す可能性があるため、JMeter ストレス テスト変数を変更したくありません。JVM をクラッシュさせるユース ケース (現在のストレス テスト シナリオ) があるので、クラッシュを修正し、テストを変更したくありません。
4)アプリケーションの静的分析を行いましたが、深刻な問題は何も起こりませんでした。
5) メモリは時間が経っても増加しません。メモリ使用量は、非常に安定した傾向で (起動後) 非常に迅速に平衡化し、疑わしいとは思われません。
6) /var/log/messages には、クラッシュの前または最中に有用な情報が含まれていません。
詳細情報: mod_jk 1.2.28 を使用して tomcat の前に apache (2.2.14) があったことを忘れていました。JVMクラッシュがJVM(tomcatコネクタ)に接続するmod_jkネイティブコードに関連している場合に備えて、現在、Apacheなしでテストを実行しています。
その後 (JVM が再びクラッシュした場合)、アプリケーションからいくつかのコンポーネント (キャッシング、ルセン、クォーツ) を削除してみて、後で jetty を使用してみます。クラッシュは現在 4 時間から 8 日間の間いつでも発生しているため、何が起こっているのかを突き止めるにはかなりの時間がかかる可能性があります。