無応答障害(デッドロック)への対応

アプリケーションに対するアクセスに対する応答がなく、無応答状態になっている場合には、 Webコンテナ(WebOTXドメイン)上の処理で資源確保待ちなどのデッドロックが発生しているか、 もしくは、Webコンテナ(WebOTXドメイン)の動作するJava VMが異常終了している場合があります。

ここでは、処理がデッドロックしている場合について説明します。

状況の確認方法

Java VMのスレッドダンプを取得します。スレッドダンプを取得する方法については、 [Java VMのスレッドダンプ取得]を参照してください。

対処方法

スレッドダンプを参照して、デッドロックの原因を推定します。J2SE 5.0以上では、 スレッドダンプにデッドロックになっていることが出力される場合もあります。

スレッドダンプでのデッドロックの出力例は次のとおりです。

Full thread dump Java HotSpot(TM) Server VM (1.5.0_22-b03 mixed mode):
・・・・
Found one Java-level deadlock:
=============================
"ajp-0.0.0.0-8099-Processor19":
  waiting to lock monitor 0x03b3cf04 (object 0x332c7f78, a java.lang.Object),
  which is held by "ajp-0.0.0.0-8099-Processor18"
"ajp-0.0.0.0-8099-Processor18":
  waiting to lock monitor 0x03b3cf24 (object 0x332c7f70, a java.lang.Object),
  which is held by "ajp-0.0.0.0-8099-Processor19"

Java stack information for the threads listed above:
===================================================
"ajp-0.0.0.0-8099-Processor19":
	at Test.TestServlet.doIt(TestServlet.java:55)
	- waiting to lock <0x332c7f78> (a java.lang.Object)
・・・・・

特定のオブジェクトの待ち合わせでスレッドの処理が止まっている場合、そのオブジェクトに 関する処理に問題があると思われます。

DBへのアクセス処理で処理が止まっている場合、DBアクセスに問題があることが考えられます。

アプリケーションやDBアクセスの処理を見直してください。


関連情報