3

これはJava thread dump: BLOCKED thread without "waiting to lock ..." に似ています。

基本的に、ブロックされたスレッドが表示されますが、待機中のロックがあります。

"pool-1-thread-60" prio=10 tid=0x00007fbf10017000 nid=0x210 waiting for monitor entry [0x00007fbed64e3000]
   java.lang.Thread.State: BLOCKED (on object monitor)
        at org.apache.log4j.Category.callAppenders(Category.java:204)
        - locked <0x0000000742444ad0> (a org.apache.log4j.Logger)
        at org.apache.log4j.Category.forcedLog(Category.java:391)
        at org.apache.log4j.Category.info(Category.java:666)
        ...

- waiting to lock <0x0000000742444ad0>...の代わりに が表示されることを期待しています- locked...。もう 1 つの質問は、ガベージ コレクションが原因であることを示唆していますが、その場合、すべてのスレッドがブロックされるわけではありませんか? RUNNABLE である他のスレッドがあります。また、それが事実であったことをどのように証明できますか?なぜこれが観察された動作になるのでしょうか? それがガベージコレクターであると盲目的に考えて、数日後にそれが別のものであることが判明するのは嫌です。

==補助情報==

当面の問題とは関係ないと思いますが、これは上記のダンプの元となったコードのセクションです。

for(Category c = this; c != null; c=c.parent) {
  // Protected against simultaneous call to addAppender, removeAppender,...
  synchronized(c) { //line 204
if(c.aai != null) {
  writes += c.aai.appendLoopOnAppenders(event);
}
if(!c.additive) {
  break;
}
  }
}

明らかに、その行で取得する必要があるロックがあります。ただし、このモニターでスレッドが実際にブロックされている場合、スレッド ダンプの出力は次のようになります (これは同じダンプからのものです)。

"pool-1-thread-44" prio=10 tid=0x00007fbef0051000 nid=0x200 waiting for monitor\
 entry [0x00007fbed74f3000]
   java.lang.Thread.State: BLOCKED (on object monitor)
        at org.apache.log4j.Category.callAppenders(Category.java:204)
        - waiting to lock <0x0000000742444ad0> (a org.apache.log4j.Logger)
        at org.apache.log4j.Category.forcedLog(Category.java:391)
        at org.apache.log4j.Category.info(Category.java:666)
        ...

私が興味を持っているダンプのセクションは異なって見えます (「ロック待ち」ではなく「ロック済み」)。多くのデッドロックをデバッグし、多くのスレッド ダンプを調べました。私がいつも目にするのは、「ロック待ち」です。「ロックされている」が「モニターのエントリを待機している」スレッドを見たことがなく、それが何を意味するのか知りたいです。

4

2 に答える 2

3

これは、Oracle の HotSpot JVM の既知の表面的なバグです。あなたが言うように、スレッドがまだ関連するロックを取得していないため、スタックトレースで- locked <0x00007f3e9a0b3830>実際に言う必要があります。- waiting to lock <0x00007f3e9a0b3830>

詳細については、このバグを参照してください。

于 2014-04-07T11:52:21.237 に答える