ページの先頭行へ戻る
Interstage Application Server V12.0.0 チューニングガイド
FUJITSU Software

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

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

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

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

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

通常、スタックオーバーフローが発生した場合、java.lang.StackOverflowErrorがスローされ、Windowsエラー報告(Windows Error Reporting(WER))が検知してユーザダンプを出力します。

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

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

なお、Windowsエラー報告の説明は、“9.5.9.1 クラッシュダンプ”を参照してください。

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

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

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

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

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

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

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

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

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

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

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

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

  • vfork

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

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

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