2010-11-11 116 views
1

我注意到有一些卡住的線程。如何分析WebLogic線程轉儲?

我喜歡根據下面的線程轉儲日誌來檢查卡住線程的原因。任何建議任何人?還有一個胖鎖和一個薄鎖之間的區別是什麼?

 "[STUCK] ExecuteThread: '25' for queue: 'weblogic.kernel.Default (self-tuning)'" id=87495 idx=0x274 tid=15308 prio=1 alive, in native, blocked, daemon 

      -- Blocked trying to get lock: com/jnn/[email protected][thin lock] 

回答

1

一組線程轉儲本身不會太有用,無法找到根本原因。每5秒鐘間隔4或5組線程轉儲。所以最後你會有一個日誌文件,在應用服務器上有大約20到25秒的動作。

那麼你應該找你要檢查是阻塞線程或長期運行的事務正在發生的事情,所有的線程轉儲會表現出一定的線程ID是在你的Java堆棧跟蹤同一行。簡而言之,事務(比如在EJB或數據庫中)橫跨多個線程轉儲,因此需要更多的調查。

現在,當您通過Samurai或TDA(我本人尚未使用TDA)運行這些代碼時,它會以紅色突出顯示這些顏色,以便您快速點擊它並找出顯示問題的線條。

查看this here的示例。查看該鏈接中的Samurai輸出圖像。綠色很好。紅色和灰色需要看。

在你的情況下,螺紋25被阻止試圖獲得鎖定這個對象

com/jnn/[email protected] 

搜尋鎖的休息,看看是同一對象上持有鎖,看看爲什麼它是不解除鎖定 - 這將是在堆棧跟蹤