我的Tomcat网站偶尔会挂起。当我转储堆栈跟踪时,我看到最多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状态,但我找不到。相反,我为每个处于BLOCKED状态的日志消息找到一个。
由于
答案 0 :(得分:0)
对我来说看起来不像死锁:应用程序完全利用所有三个核心。此外,似乎应用程序在log4j中遭受锁争用,因此大多数时候大多数线程都在等待当前正在使用它的线程释放log4j appender。