Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
死锁-Java EE Web应用程序中阻塞的线程_Java_Multithreading_Jakarta Ee_Jboss_Deadlock - Fatal编程技术网

死锁-Java EE Web应用程序中阻塞的线程

死锁-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

我有一个Java/JavaEEWeb应用程序,部署在JBoss6x中

有时应用程序会停止,并且出现死锁情况,许多线程处于阻塞状态,如最后粘贴的线程转储中的这段代码所示

问题
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 JTA库中的一个bug(或者你可能用错了,但看起来更像是一个bug)。你应该跟JBoss团队跟进,最好有一些条件来重现
  • 这可能是由于未经测试的错误条件组合造成的,可能与网络层或您猜测的DB有关

  • 这当然有可能是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只是一种构建项目的方法,仅此而已。