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

7.4.3 ハングアップ(フリーズ)した場合

  本節では、Javaプロセスが残っているにもかかわらず、プログラムが無応答になった場合、考えられる原因とその対処方法を説明します。

想定される原因(デッドロック)

  デッドロックが発生した場合、そのスレッドが停止されます。
  ハングアップしたときに、スレッドダンプを採取して、デッドロックがないかどうかを確認してください。

  スレッドダンプの採取方法および解析方法の詳細は、“7.3.3 スレッドダンプ”を参照してください。

想定される原因(ガーベジコレクション)

  ガーベジコレクションが発生すると、ガーベジコレクションが終了するまでの間、Javaアプリケーションのすべてのスレッドが停止されます。
  これにより、Javaアプリケーションがハングアップしたかのように見える場合があります。

  ガーベジコレクションのログを採取して、ガーベジコレクションが動作したタイミングを照合してください。ガーベジコレクションが原因で無応答のような現象になる場合は、Javaヒープをチューニングして、ガーベジコレクションの動作具合を改善してください。

  ガーベジコレクションのログを採取する方法は、“7.3.1 ガーベジコレクションのログ出力”を参照してください。
  Javaヒープのチューニング方法は、“7.5.2 Javaヒープのチューニング”を参照してください。

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

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

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

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

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


  次の関数を使用したときに、ハングした事例があります。