我们的Java应用程序与WildFly 8.2.1和Java 1.8_92一起运行,完全挂起在巨大的负载上。在这种情况下,一个threaddump表明,很多线程都在状态的监控0x00000005cc562228等待:如何识别Java中的监视器锁的所有者
"default task-100" #825 prio=5 os_prio=0 tid=0x00000000033a2800 nid=0x49bd in Object.wait() [0x00007f238cb98000]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
at com.mchange.v2.resourcepool.BasicResourcePool.awaitAvailable(BasicResourcePool.java:1465)
at com.mchange.v2.resourcepool.BasicResourcePool.prelimCheckoutResource(BasicResourcePool.java:644)
- locked <0x00000005cc562228> (a com.mchange.v2.resourcepool.BasicResourcePool)
at com.mchange.v2.resourcepool.BasicResourcePool.checkoutResource(BasicResourcePool.java:554)
.......
,我们如何才能找到这个监视器锁定的所有者,因为我们假设该线程是一些连接处泄漏的原因是什么?我们假定这个监视器锁定出现在另一个上下文中,但事实并非如此。
或者可能是有任何其他暗示的僵局?任何帮助都非常值得赞赏,因为我们在这个问题上挣扎了很长时间。
它挂起的原因并不是那些线程等待锁定变为可用,而是等待某些内容调用notify(All)并且某些事情可能拥有池中的资源(或忘记通知)。如果锁定被阻止,您会看到类似“等待显示器输入”的内容(例如http://stackoverflow.com/a/11343043)。 – zapl