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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

Copyright 2008 FUJITSU LIMITED