我們的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