Interstage Application Server/Interstage Web Server チューニングガイド |
目次 索引 |
第7章 JDK/JREのチューニング | > 7.4 異常発生時の原因振り分け |
本節では、何の痕跡も残さずに突然プロセスが消滅した場合に、考えられる原因とその対処方法を説明します。
FJVMには、スタックオーバーフロー検出時にメッセージを出力する機能を備えています。FJVMログを分析することにより、スタックオーバーフローが発生したかどうかを確認することができます。FJVMログの分析方法は、“スタックオーバーフロー検出時のメッセージ出力機能”を参照してください。
スタックオーバーフローが発生したことを確認できた場合、該当するスタックのサイズをチューニングしてください。スタックのチューニング方法は、“スタックのチューニング”を参照してください。
通常、スタックオーバーフローが発生した場合、java.lang.StackOverflowErrorがスローされ、ワトソン博士が検知してユーザダンプおよびワトソンログを出力します。
しかし、OSが高負荷状態になったり、スタックオーバーフロー発生時のスタック残量が少なかったりすると、OSからFJVMにもワトソン博士にも制御が渡らないまま、痕跡を残さずにプロセスが消滅することがあります。
したがって、プロセスが消滅した原因が不明な場合は、スタックのサイズを拡張して、現象が改善できるかどうかを確認してください。スタックのサイズを拡張しても改善できない場合は、別の原因を調査してください。
なお、ワトソン博士の説明は、“クラッシュダンプ”を参照してください。
FJVMの“長時間コンパイル処理の検出機能”による終了の可能性があります。
詳細は、“長時間コンパイル処理の検出機能”を参照してください。
Javaアプリケーションを“-XX:CompileTimeout”オプションで起動した場合は、標準出力にFJVMからのメッセージが出力されていないかどうかを確認してください。
Java VM以外のモジュールで、シグナルハンドラを登録した場合、Javaアプリケーションが正常に動作せずに、異常終了することがあります。詳細は、“異常終了時のシグナルハンドラ情報”を参照してください。
FJVMを使用している場合は、FJVMログにシグナルハンドラ情報が出力されますので、それを確認してください。
JNI経由でJava以外の言語で開発したネイティブモジュールと連携する際、JNIの使用方法を誤ると、プロセス消滅の原因となります。
このようなときは、“-Xcheck:jni”オプションを指定して、JNI処理でメッセージが出力されないかどうかを確認してください。“-Xcheck:jni”オプションの詳細は、“JNI処理異常時のメッセージ出力”を参照してください。
JNI処理に誤りがなくても、ネイティブモジュールで異常終了またハングアップが発生すると、Javaアプリケーションのプロセスが消滅する場合があります。たとえば、スレッドアンセーフな関数を使用している場合は、注意が必要です。
スレッドアンセーフな関数の例
次の関数を使用したときに、障害が発生した事例があります。
- vfork
Javaプロセスが、特別なメッセージ出力などがないまま、予想外の状態で終了した場合、原因の1つとして、次のいずれかが考えられます。
FJVMを使用している場合は、“Java VM終了時における状態情報のメッセージ出力機能”を参照して、対処してください。
Windows Server(R) 2003の初期版においては、ユーザダンプが出力されない問題をはじめとして、その他にもJavaの実行動作に影響を及ぼす問題などがあります。
たとえば、次のような問題があります。
Windows Server(R) 2003を使用する場合は、Service Pack 1またはHotfixを適用してください。
目次 索引 |