ページの先頭行へ戻る
Interstage Application Server/Interstage Web Server チューニングガイド

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

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

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

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

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

  通常、スタックオーバーフローが発生した場合、java.lang.StackOverflowErrorがスローされ、ワトソン博士が検知してユーザダンプおよびワトソンログを出力します。

  しかし、OSが高負荷状態になったり、スタックオーバーフロー発生時のスタック残量が少なかったりすると、OSからFJVMにもワトソン博士にも制御が渡らないまま、痕跡を残さずにプロセスが消滅することがあります。

  したがって、プロセスが消滅した原因が不明な場合は、スタックのサイズを拡張して、現象が改善できるかどうかを確認してください。スタックのサイズを拡張しても改善できない場合は、別の原因を調査してください。

  なお、ワトソン博士の説明は、“7.3.4 クラッシュダンプ・コアダンプ”を参照してください。

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

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

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

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


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

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

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

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

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

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

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


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

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

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

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

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

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

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