Interstage Application Server/Interstage Web Server チューニングガイド
目次 索引 前ページ次ページ

第7章 JDK/JREのチューニング> 7.4 異常発生時の原因振り分け

7.4.4 プロセスが消滅(異常終了)した場合

 本節では、何の痕跡も残さずに突然プロセスが消滅した場合に、考えられる原因とその対処方法を説明します。

■想定される原因(スタックオーバーフロー)

 FJVMには、スタックオーバーフロー検出時にメッセージを出力する機能を備えています。FJVMログを分析することにより、スタックオーバーフローが発生したかどうかを確認することができます。FJVMログの分析方法は、“スタックオーバーフロー検出時のメッセージ出力機能”を参照してください。

 スタックオーバーフローが発生したことを確認できた場合、該当するスタックのサイズをチューニングしてください。スタックのチューニング方法は、“スタックのチューニング”を参照してください。

 通常、スタックオーバーフローが発生した場合、java.lang.StackOverflowErrorがスローされ、ワトソン博士が検知してユーザダンプおよびワトソンログを出力します。
 しかし、OSが高負荷状態になったり、スタックオーバーフロー発生時のスタック残量が少なかったりすると、OSからFJVMにもワトソン博士にも制御が渡らないまま、痕跡を残さずにプロセスが消滅することがあります。
 したがって、プロセスが消滅した原因が不明な場合は、スタックのサイズを拡張して、現象が改善できるかどうかを確認してください。スタックのサイズを拡張しても改善できない場合は、別の原因を調査してください。
 なお、ワトソン博士の説明は、“クラッシュダンプ”を参照してください。

■想定される原因(長時間コンパイル処理の検出機能による終了)

 FJVMの“長時間コンパイル処理の検出機能”による終了の可能性があります。
 詳細は、“長時間コンパイル処理の検出機能”を参照してください。

 Javaアプリケーションを“-XX:CompileTimeout”オプションで起動した場合は、標準出力にFJVMからのメッセージが出力されていないかどうかを確認してください。

■想定される原因(シグナルハンドラ)


 Java VM以外のモジュールで、シグナルハンドラを登録した場合、Javaアプリケーションが正常に動作せずに、異常終了することがあります。詳細は、“異常終了時のシグナルハンドラ情報”を参照してください。

 FJVMを使用している場合は、FJVMログにシグナルハンドラ情報が出力されますので、それを確認してください。

■想定される原因(JNI処理の異常)

 JNI経由でJava以外の言語で開発したネイティブモジュールと連携する際、JNIの使用方法を誤ると、プロセス消滅の原因となります。

 このようなときは、“-Xcheck:jni”オプションを指定して、JNI処理でメッセージが出力されないかどうかを確認してください。“-Xcheck:jni”オプションの詳細は、“JNI処理異常時のメッセージ出力”を参照してください。

 JNI処理に誤りがなくても、ネイティブモジュールで異常終了またハングアップが発生すると、Javaアプリケーションのプロセスが消滅する場合があります。たとえば、スレッドアンセーフな関数を使用している場合は、注意が必要です。

スレッドアンセーフな関数の例


 次の関数を使用したときに、障害が発生した事例があります。

■想定される原因(プログラムによる終了)

 Javaプロセスが、特別なメッセージ出力などがないまま、予想外の状態で終了した場合、原因の1つとして、次のいずれかが考えられます。

 FJVMを使用している場合は、“Java VM終了時における状態情報のメッセージ出力機能”を参照して、対処してください。

■想定される原因(Windows Server(R) 2003の問題)

 Windows Server(R) 2003の初期版においては、ユーザダンプが出力されない問題をはじめとして、その他にもJavaの実行動作に影響を及ぼす問題などがあります。
 たとえば、次のような問題があります。

 Windows Server(R) 2003を使用する場合は、Service Pack 1またはHotfixを適用してください。


目次 索引 前ページ次ページ

Copyright 2008 FUJITSU LIMITED