死锁-Java EE Web应用程序中阻塞的线程
我有一个Java/JavaEEWeb应用程序,部署在JBoss6x中 有时应用程序会停止,并且出现死锁情况,许多线程处于阻塞状态,如最后粘贴的线程转储中的这段代码所示 问题:死锁-Java EE Web应用程序中阻塞的线程,java,multithreading,jakarta-ee,jboss,deadlock,Java,Multithreading,Jakarta Ee,Jboss,Deadlock,我有一个Java/JavaEEWeb应用程序,部署在JBoss6x中 有时应用程序会停止,并且出现死锁情况,许多线程处于阻塞状态,如最后粘贴的线程转储中的这段代码所示 问题: 1.什么是事务收割机工作者-它锁定了什么资源? 2.这是JTA的问题吗?是什么引起的。如何进一步调查、解决此问题? 3.几乎有10个线程处于阻塞状态,具有类似的堆栈跟踪。这个问题可能是由于db端出了问题吗 非常感谢您的帮助 "ajp-0.0.0.0-8809-19" - Thread t@238 java.lang.Thr
1.什么是事务收割机工作者-它锁定了什么资源?
2.这是JTA的问题吗?是什么引起的。如何进一步调查、解决此问题?
3.几乎有10个线程处于阻塞状态,具有类似的堆栈跟踪。这个问题可能是由于db端出了问题吗 非常感谢您的帮助
"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-8809-19”-螺纹t@238
java.lang.Thread.State:已阻止
在com.arjuna.ats.arjuna.coordinator.BasicAction.removeChildThread(BasicAction.java:650)上
-等待“事务收割机工作者44”拥有的锁(com.arjuna.ats.internal.jta.transaction.arjunacore.AtomicAction)t@942
在com.arjuna.ats.internal.arjuna.thread.ThreadActionData.purgeActions(ThreadActionData.java:248)上
....
....
锁定可拥有的同步器:
-锁定(一个java.util.concurrent.locks.ReentrantLock$FairSync)
“事务收割机工作者44”-线程t@942
java.lang.Thread.State:正在等待
在sun.misc.Unsafe.park(本机方法)
-正在等待“ajp-0.0.0.0-8809-19”拥有的锁(java.util.concurrent.locks.ReentrantLock$FairSync)t@238
位于java.util.concurrent.locks.LockSupport.park(LockSupport.java:158)
.....
在com.arjuna.ats.arjuna.coordinator.BasicAction.doAbort(BasicAction.java:2902)
在com.arjuna.ats.arjuna.coordinator.BasicAction.doAbort(BasicAction.java:2881)
在com.arjuna.ats.arjuna.coordinator.BasicAction.Abort(BasicAction.java:1602)
-锁定(com.arjuna.ats.internal.jta.transaction.arjunacore.AtomicAction)
在com.arjuna.ats.arjuna.coordinator.TwoPhaseCoordinator.cancel上(TwoPhaseCoordinator.java:119)
在com.arjuna.ats.arjuna.AtomicAction.cancel上(AtomicAction.java:212)
位于com.arjuna.ats.arjuna.coordinator.TransactionReaper.doCancellations(TransactionReaper.java:367)
位于com.arjuna.ats.internal.arjuna.coordinator.ReaperWorkerThread.run(ReaperWorkerThread.java:79)
这是一种典型的死锁情况。线程ajp-0.0.0-8809-19
已获取对象引用ed3045
上的锁,并正在等待获取对象引用7c0d6
上的锁;但线程事务收割机工作者44
已锁定后者,并正在等待获取前者。两者都不是要放手让另一个获得他们想要的锁,所以这是一个死锁
回答您的问题:
这当然有可能是JBoss事务中的一个bug。值得研究它是否是您自己代码中的bug。线程
ajp-0.0.0.0-8809-19
是servlet容器的工作线程之一,它执行您的代码。有问题的操作是它获取了收割者稍后想要的锁:
Locked ownable synchronizers:
- locked <ed3045> (a java.util.concurrent.locks.ReentrantLock$FairSync)
锁定的可拥有同步器:
-锁定(一个java.util.concurrent.locks.ReentrantLock$FairSync)
你能确定堆栈中锁定该对象的点吗?你最接近的代码是什么,它在做什么?你使用的是哪个版本的库?这可能已经被修复了alreadyEugene>哪个库?jbossjta。查看yur pom.xml。你有吗?Eugene>我没有使用maven,但我会检查jboss jta jar版本但这甚至可能是一个应用程序代码问题,不是吗。好吧。那么,你的库在哪里呢?Maven只是一种构建项目的方法,仅此而已。