Interstage Application Serverで、Javaアプリケーションの実行中に、デッドロックが発生しているか確認する方法はありますか?

Javaアプリケーションの実行中に、アプリケーションからの応答がありません。デッドロックしている可能性がありますが、確認方法はありますか?
スレッドダンプの出力内容から、デッドロックの状況を確認することができます。

以下は、Thread1とThread2 という2つのスレッド間でデッドロックが発生している場合のスレッドダンプ出力例です。出力例1、出力例2は1回のスレッドダンプで出力される内容から、デッドロック調査に関連するものを抜粋しています。

出力例1(抜粋)
--------------------------------------------------
"Thread2" prio=5 tid=0x0092f4d8 nid=0x640 waiting for monitor entry [182ef000..182efd64]
at Thread1.method(DeadlockSample.java:31)
- waiting to lock <0x1002ffe8> (a Thread1)
at Thread2.run(DeadlockSample.java:45)
- locked <0x10030ca0> (a Thread2)

"Thread1" prio=5 tid=0x0092f370 nid=0x294 waiting for monitor entry [182af000..182afd64]
at Thread2.method(DeadlockSample.java:51)
- waiting to lock <0x10030ca0> (a Thread2)
at Thread1.run(DeadlockSample.java:25)
- locked <0x1002ffe8> (a Thread1)
--------------------------------------------------
上記の内容から、Thread2は、「<0x10030ca0>」のロックを取り、「<0x1002ffe8>」のロック解放を待ち、Thread1は、「<0x1002ffe8>」のロックを取り、「<0x10030ca0>」のロック解放を待ってるデッドロック状態ということがわかります。

出力例2(抜粋)
--------------------------------------------------
Found one Java-level deadlock:
=============================
"Thread2":
waiting to lock monitor 0x00929c3c (object 0x1002ffe8, a Thread1),
which is held by "Thread1"
"Thread1":
waiting to lock monitor 0x00929c5c (object 0x10030ca0, a Thread2),
which is held by "Thread2"
     :
   (略)
     :
Found 1 deadlock.
--------------------------------------------------
上記の内容から、Thread2はThread1が保持しているロックの解放待ち、Thread1はThread2が保持しているロックの解放待ちでデッドロック状態ということがわかります。また、「Found one Java-level deadlock」、「Found 1 deadlock.」の文字列からもデッドロック状態ということがわかります。

スレッドダンプの採取方法は、関連FAQを参照してください。

関連FAQ:
FAQ11834 「Interstage Application Serverにおける、Javaアプリケーションのスレッドダンプ(Full thread dump)の採取方法について

製品・サービス区分 Interstage
製品・サービス情報
対象製品 Interstage Application Server
バージョン V11, V10, V9, V8, V7, V6
プラットフォーム Windows, Solaris, Linux
アンサー種別 運用/保守
このページの先頭へ