我有一个部署在JBoss 6x中的Java / Java EE Web应用程序。
有时应用程序停止运行,并且似乎存在死锁情况,许多线程处于BLOCKED状态,如最后粘贴的Thread Dump的片段中所示。
问题:
1.什么是交易收割者工人 - 锁定了什么资源?
这是JTA问题吗?造成这种情况的原因。我如何调查,进一步解决这个问题?
3.有近10个线程处于BLOCKED状态,具有类似的堆栈跟踪。这个问题可能是由于db end出错了吗?
非常感谢任何帮助。
"ajp-0.0.0.0-8809-19" - Thread t@238
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" t@942
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 t@942
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" t@238
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 :(得分:1)
这是一个典型的僵局。线程ajp-0.0.0.0-8809-19
已获取对象引用ed3045
的锁定,并且正在等待获取对象引用7c0d6
的锁定;但线程Transaction Reaper Worker 44
锁定了后者并等待获取前者。也不会放手让对方获得他们想要的锁定,所以这是一个僵局。
回答你的问题:
答案 1 :(得分:0)
这肯定是JBoss Transactions中的一个错误。值得研究一下它是否是您自己代码中的错误。线程ajp-0.0.0.0-8809-19
是servlet容器的工作线程之一,它执行您的代码。可疑的行动是它获得了收割机后来想要的锁:
Locked ownable synchronizers:
- locked <ed3045> (a java.util.concurrent.locks.ReentrantLock$FairSync)
你能识别堆栈中锁定该对象的点吗?你最近的代码是什么,它在做什么?