2013-04-23 143 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) 

你能确定在锁定该对象的堆栈点?什么是你最接近的代码,它在做什么?