我的web应用程序(在weblogic上被延迟)宕机了,当我检查jstack信息时,我发现org.apache.log4j.spi.RootLogger上的大多数线程都被阻塞了。拥有这个锁的线程也被阻塞和阻塞了至少20分钟,直到我杀死这个进程,但它没有等待任何其他锁,这是怎么发生的?
下面是jstack信息:
被阻塞的线程拥有锁<783b8910>,但不等待其他锁:
"[STUCK] ExecuteThread: '58' for queue: 'weblogic.kernel.Default (self-tuning)'" daemon prio=7 tid=02e45400 nid=86 lwp_id=7959740 waiting for monitor entry [61cff000]
java.lang.Thread.State: BLOCKED (on object monitor)
at org.apache.log4j.Category.callAppenders(Category.java:201)
- locked <783b8910> (a org.apache.log4j.spi.RootLogger)
at org.apache.log4j.Category.forcedLog(Category.java:388)
at org.apache.log4j.Category.error(Category.java:302)等待锁定<783b8910>的其他线程:
"[STUCK] ExecuteThread: '36' for queue: 'weblogic.kernel.Default (self-tuning)'" daemon prio=7 tid=02e0ea00 nid=64 lwp_id=7959717 waiting for monitor entry [62d7f000]
java.lang.Thread.State: BLOCKED (on object monitor)
at org.apache.log4j.Category.callAppenders(Category.java:201)
- waiting to lock <783b8910> (a org.apache.log4j.spi.RootLogger)
at org.apache.log4j.Category.forcedLog(Category.java:388)
at org.apache.log4j.Category.error(Category.java:319)和
"[STUCK] ExecuteThread: '34' for queue: 'weblogic.kernel.Default (self-tuning)'" daemon prio=7 tid=02e0a200 nid=62 lwp_id=7959715 waiting for monitor entry [62eff000]
java.lang.Thread.State: BLOCKED (on object monitor)
at org.apache.log4j.Category.callAppenders(Category.java:201)
- waiting to lock <783b8910> (a org.apache.log4j.spi.RootLogger)
at org.apache.log4j.Category.forcedLog(Category.java:388)
at org.apache.log4j.Category.info(Category.java:663)以此类推,总共有64个线程在等待锁定<783b8910>
这种情况每个月会发生1-3次,我找不到解决方案,因为我不知道为什么拥有锁的线程被阻塞,而不是等待其他锁。
log4j版本为1.2.13
发布于 2020-12-15 20:59:34
在Java Command Windows上,如果您单击停止打印日志,则此线程在打印日志时发生阻塞,因此线程在打印日志时处于阻塞状态。
因此,如果这就是问题所在,您可以使用AsyncAppender。
https://stackoverflow.com/questions/27763111
复制相似问题