[英]Deadlock - Threads Blocked in Java EE Web Application
我有一个部署在JBoss 6x中的Java / Java EE Web应用程序。
有时应用程序停止运行,并且似乎出现了死锁情况,许多线程处于BLOCKED状态,如最后从Thread Dump粘贴的此代码段所示。
问题 :
1.什么是交易收割工人-它锁定了哪些资源?
2.这是JTA问题吗? 是什么原因造成的。 我该如何调查,并进一步解决?
3.几乎有10个处于BLOCKED状态的线程具有相似的堆栈跟踪。 可能是由于数据库端出现问题导致此问题
任何帮助,不胜感激。
"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)
这是典型的僵局情况。 线程ajp-0.0.0.0-8809-19
已获取对对象引用ed3045
的锁定,并正在等待获取对对象引用7c0d6
的锁定; 但是线程Transaction Reaper Worker 44
具有对后者的锁定,正在等待获取前者。 双方都不会放手让对方获得他们想要的锁,所以这是一个死锁。
要回答您的问题:
这肯定是JBoss Transactions中的错误。 值得调查这是否是您自己的代码中的错误。 线程ajp-0.0.0.0-8809-19
是servlet容器的工作线程之一,它执行您的代码。 可疑的动作是它获取了收割者后来想要的锁:
Locked ownable synchronizers:
- locked <ed3045> (a java.util.concurrent.locks.ReentrantLock$FairSync)
您能确定堆栈中锁定该对象的点吗? 您最接近的代码是什么,它在做什么?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.