2014-03-19 44 views
0

我們已經漏出一點的內存的應用程序,一個比特被輕描淡寫。有什麼辦法殺死運行的線程死鎖的「http:8080-42」,它封鎖了所有其他線程

我使用jstack,試圖找到是什麼原因造成的問題。

我看到的線程數成長了不少上啓動名爲線程:HTTP-8080- 42

例如:

「HTTP-8080-13」 守護PRIO = 10 TID = 0x00002aacb4ae6000 NID = 0x5ddf等待監視器條目[0x0000000043e65000] java.lang.Thread.State中:BLOCKED(對象監視器上) 在com.reg_dashboard.DataModel.findRegsRow(DataModel.java:280) - 等待鎖定< 0x00002aaab0c996b0> (一個用於com.reg_dashboard.DataModel的java.lang.Class)

我的第一個猜測是,每一個這些線程的是從客戶端及其對某種同步塊的等待打了一個請求。 我的問題是,這些線程已經運行很長一段時間(到目前爲止10分鐘)。

我的問題是這樣的:

有什麼辦法,來殺死這個線程,這是造成我的應用程序掛起???有一些請求正在加載catche並卡住,其他進程正在等待對象被解鎖!

回答

1

有沒有什麼辦法來殺死這個線程導致我的應用程序 掛起???

不太可能。當外部進程殺死其中一個線程時,底層的JVM實現應該知道如何做出反應。您可能會將虛擬機置於不一致的狀態。

您已經知道死鎖的位置。較新的虛擬機幾乎告訴你哪些線程相互死鎖。解決問題的根源,而不是試圖殺死線程。誰是說殺死鎖定線程10秒後線程不會死鎖(假設即使有效)。

我建議像JProfiler一個工具,如果你想帶在你的應用程序中的鎖定機制更深入的瞭解。您可以更快地解決問題。我暗指Monitor profiling部分。