2013-04-23 148 views
2

我有一個部署在JBoss 6x中的Java/Java EE Web應用程序。死鎖 - 在Java EE Web應用程序中阻塞的線程

有時候應用程序會停下來,看起來像是死鎖狀態,很多線程處於BLOCKED狀態,正如在最後粘貼的Thread Dump片段中看到的那樣。

問題
1.什麼是交易收割者工作者 - 它鎖定了哪些資源?
2.這是JTA問題嗎?是什麼造成的。我如何進行調查,進一步解決這個問題?
3.幾乎有10個線程處於BLOCKED狀態,具有類似的堆棧跟蹤。這個問題可能是由db端出錯導致的

任何幫助非常感謝。

"ajp-0.0.0.0-8809-19" - Thread [email protected] 
java.lang.Thread.State: BLOCKED 
    at com.arjuna.ats.arjuna.coordinator.BasicAction.removeChildThread(BasicAction.java:650) 
    - waiting to lock <7c0d6> (a com.arjuna.ats.internal.jta.transaction.arjunacore.AtomicAction) owned by "Transaction Reaper Worker 44" [email protected] 
    at com.arjuna.ats.internal.arjuna.thread.ThreadActionData.purgeActions(ThreadActionData.java:248 
    .... 
    .... 
    Locked ownable synchronizers: 
    - locked <ed3045> (a java.util.concurrent.locks.ReentrantLock$FairSync) 

"Transaction Reaper Worker 44" - Thread [email protected] 
    java.lang.Thread.State: WAITING 
    at sun.misc.Unsafe.park(Native Method) 
    - waiting to lock <ed3045> (a java.util.concurrent.locks.ReentrantLock$FairSync) owned by "ajp-0.0.0.0-8809-19" [email protected] 
    at java.util.concurrent.locks.LockSupport.park(LockSupport.java:158) 
    ..... 
    at com.arjuna.ats.arjuna.coordinator.BasicAction.doAbort(BasicAction.java:2902) 
    at com.arjuna.ats.arjuna.coordinator.BasicAction.doAbort(BasicAction.java:2881) 
    at com.arjuna.ats.arjuna.coordinator.BasicAction.Abort(BasicAction.java:1602) 
    - locked <7c0d6> (a com.arjuna.ats.internal.jta.transaction.arjunacore.AtomicAction) 
    at com.arjuna.ats.arjuna.coordinator.TwoPhaseCoordinator.cancel(TwoPhaseCoordinator.java:119) 
    at com.arjuna.ats.arjuna.AtomicAction.cancel(AtomicAction.java:212) 
    at com.arjuna.ats.arjuna.coordinator.TransactionReaper.doCancellations(TransactionReaper.java:367) 
    at com.arjuna.ats.internal.arjuna.coordinator.ReaperWorkerThread.run(ReaperWorkerThread.java:79)  
+0

你使用的是庫的版本?這可能已經被修復了 – Eugene 2013-04-23 07:29:45

+0

Eugene>哪個Libarary? – Jasper 2013-04-23 07:56:09

+0

jbossjta。看看yom pom.xml。你有嗎? – Eugene 2013-04-23 07:59:34

回答

0

這是一個典型的死鎖情況。線程ajp-0.0.0.0-8809-19已獲取對象引用ed3045的鎖定,並且正在等待獲取對象引用7c0d6的鎖定;但線程Transaction Reaper Worker 44鎖定後者,並正在等待獲取前者。也不會放手讓其他人獲得他們想要的鎖定,所以這是一個僵局。

回答您的問題:

  1. 交易收割工人是主題,他們的工作是大概是爲了確保未提交的事務對象不編程錯誤的情況下積聚(如無法正常關閉交易)或未處理的網絡錯誤
  2. 這是JBoss JTA庫中的一個錯誤(或者可能錯誤地使用了它,但它看起來更像是一個錯誤)。您應該遵循了JBoss的團隊,最好帶些條件重現
  3. 這很可能是由於錯誤條件的未經檢驗的組合,可能涉及到網絡層,或DB,你揣
0

這當然是可能的,這是JBoss Transactions中的一個錯誤。值得研究它是否是你自己代碼中的一個bug。線程ajp-0.0.0.0-8809-19是servlet容器的工作線程之一,它執行你的代碼。可疑的動作是收購它收割後要鎖定的:

Locked ownable synchronizers: 
- locked <ed3045> (a java.util.concurrent.locks.ReentrantLock$FairSync) 

你能確定在鎖定該對象的堆棧點?什麼是你最接近的代碼,它在做什麼?