スレッドダンプの理解に困っています。私はjstackからTomcat 6(Java 1.6.0_22、Linux)上で動作するSpring MVC Webアプリケーションを入手しました。 。Javaスレッドのダンプ: "ロックするのを待っていない..."
自分自身でブロックされているブロッキングスレッド(他のスレッドを待機させる)が表示されますが、スレッドダンプではなぜ、どのモニターが待機しているのかはわかりません。
例:
"TP-Processor75" daemon prio=10 tid=0x00007f3e88448800 nid=0x56f5 waiting for monitor entry [0x00000000472bc000]
java.lang.Thread.State: BLOCKED (on object monitor)
at java.lang.Class.initAnnotationsIfNecessary(Class.java:3067)
- locked <0x00007f3e9a0b3830> (a java.lang.Class for org.catapultframework.resource.ResourceObject)
at java.lang.Class.getAnnotation(Class.java:3029)
...
すなわち、私は、スタックトレースの "ロックを待っています..."という行がありません。どうやら、スレッドはClassオブジェクトをロックしていますが、スレッド自体がブロックされている理由はわかりません。
スレッドダンプにはデッドロックのヒントは含まれていません。
ロックモニタを特定するにはどうすればよいですか?
おかげで、 オリバー
参照0x00000000472bc000の他のエントリがありますか? –
いいえ、同じダンプにはありません。 0x00000000472bc000はスレッド "TP-Processor75"を識別します。そのため、ダンプ内の同じスレッドの複数の記述が必要ですか? – Oliver
よく0x00000000472bc000は、スレッドが入力待ちのモニターを示します。つまり、別のスレッドがモニタ参照0x00000000472bc000に入っており、TP-Processor75が現在保持しているスレッドが0x00000000472bc000を解放するのを待っている –