0

Tomcat Web サイトが散発的にハングします。スタック トレースをダンプすると、次のような最大 200 のスレッドが表示されます。

"TP-Processor200" daemon prio=10 tid=0x00007fddf062a800 nid=0x4bce waiting for monitor entry [0x00007fdd5020b000]
   java.lang.Thread.State: BLOCKED (on object monitor)
    at org.apache.log4j.Category.callAppenders(Category.java:204)
    - waiting to lock <0x00000007808d3a88> (a org.apache.log4j.spi.RootLogger)
    at org.apache.log4j.Category.forcedLog(Category.java:391)

Java プロセスは 300% の CPU を消費しています。RUNNING 状態のスレッドが 3 つあることを期待していましたが、何も見つかりませんでした。代わりに、BLOCKED 状態のログ メッセージごとに 1 つ見つけます。

  1. なぜ 300% の CPU なのですか? これはコア数 - 1 スレッドまで使用する JVM のものですか?
  2. デッドロックの原因は何ですか? 最新の log4j.jar を使用しています。この問題は、Tomcat 6.0.35/Java 1.6.0_31-b04 でのみ発生しますが、Tomcat 6.0.18/Java 1.6.0_17-b04 では発生しません。

ありがとう

4

1 に答える 1

0

私にはデッドロックのようには見えません。アプリケーションは 3 つのコアすべてを完全に利用しています。また、アプリケーションは log4j でロック競合に苦しんでいるように見えるため、ほとんどのスレッドは、現在使用しているスレッドによって log4j アペンダーが解放されるのをほとんどの場合待機します。

于 2013-02-11T09:32:32.583 に答える