Interstage Application Server/Interstage Web Server チューニングガイド |
目次 索引 |
第7章 JDK/JREのチューニング | > 7.4 異常発生時の原因振り分け |
本節では、Javaプロセスが残っているにもかかわらず、プログラムが無応答になった場合、考えられる原因とその対処方法を説明します。
デッドロックが発生した場合、そのスレッドが停止されます。
ハングアップしたときに、スレッドダンプを採取して、デッドロックがないかどうかを確認してください。
スレッドダンプの採取方法および解析方法の詳細は、“スレッドダンプ”を参照してください。
ガーベジコレクションが発生すると、ガーベジコレクションが終了するまでの間、Javaアプリケーションのすべてのスレッドが停止されます。
これにより、Javaアプリケーションがハングアップしたかのように見える場合があります。
ガーベジコレクションのログを採取して、ガーベジコレクションが動作したタイミングを照合してください。ガーベジコレクションが原因で無応答のような現象になる場合は、Javaヒープをチューニングして、ガーベジコレクションの動作具合を改善してください。
ガーベジコレクションのログを採取する方法は、“ガーベジコレクションのログ出力”を参照してください。
Javaヒープのチューニング方法は、“Javaヒープのチューニング”を参照してください。
JNI経由でJava以外の言語で開発したネイティブモジュールと連携する際、JNIの使用方法を誤ると、ハングアップの原因となります。
このようなときは、“-Xcheck:jni”オプションを指定して、JNI処理でメッセージが出力されないかどうかを確認してください。“-Xcheck:jni”オプションの詳細は、“JNI処理異常時のメッセージ出力”を参照してください。
JNI処理に誤りがなくても、JNIモジュールで異常終了またハングアップが発生すると、Javaアプリケーションがハングアップする場合があります。たとえば、スレッドアンセーフな関数を使用している場合は、注意が必要です。
スレッドアンセーフな関数の例
次の関数を使用したときに、ハングした事例があります。
- vfork
目次 索引 |