2013-02-11 39 views
0

我的Tomcat網站偶爾掛起。當我轉儲堆棧跟蹤時,我看到多達200個線程,像這樣:四核CPU上的Java(log4j)死鎖。爲什麼300%的CPU?

"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狀態下看到三個線程,但我找不到任何線程。相反,我會在BLOCKED狀態下爲每個日誌消息找到一個。

  1. 爲什麼300%的CPU?這是一個JVM的東西,用於核心數量 - 1線程?
  2. 什麼會導致死鎖?我正在使用最新的log4j.jar。這個問題只發生在Tomcat 6.0.35/JAVA 1.6.0_31-B04,但不是tomcat的6.0.18/JAVA 1.6.0_17-B04

感謝

+0

我可能是盲目的,錯過了三個RUNNABLE線程。有一個log4j Appender循環。我仍然想知道爲什麼每次只有三個線程... – ropo 2013-03-28 14:34:45

回答

0

看起來不像僵局對我來說:應用完全利用所有三個核心。此外,似乎應用程序在log4j中存在鎖爭用,因此大多數線程在等待log4j appender時被當前正在使用它的線程釋放。