2013-04-23 1 views
2

Я hava веб-приложение Java/Java EE, развернутое в JBoss 6x.Deadlock - Темы, заблокированные в Java EE Веб-приложение

Иногда приложение останавливается, и, похоже, ситуация с блокировкой, со многими потоками в состоянии BLOCKED, как видно из этого фрагмента из нити Dump, вставленной в конце.

Вопросы:
1. Что такое транзакция Жнец работник - какой ресурс она заперта?
2. Является ли это проблемой JTA? Что вызывает это. Как я могу расследовать, разрешить это дальше?
3. В состоянии BLOCKED имеется почти 10 потоков с аналогичной трассировкой стека. Может ли эта проблема быть вызвана тем, что что-то пошло не так на конце 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

waht версия библиотеки вы используете? Возможно, это уже было исправлено – Eugene

+0

Eugene> Which Libarary? – Jasper

+0

jbossjta. Посмотрите в yur pom.xml. У тебя есть это? – Eugene

ответ

0

Это классическая ситуация взаимоблокировки. Поток ajp-0.0.0.0-8809-19 приобрел блокировку по ссылке на объект ed3045 и ожидает получения блокировки по ссылке объекта 7c0d6; но Thread Transaction Reaper Worker 44 имеет замок на последнем и ждет, чтобы приобрести прежний. Ничто не отпустит, и пусть другой получит желаемый замок, так что это тупик.

Чтобы ответить на ваши вопросы:

  1. Транзакция Жнец работник является Thread, чья работа, по-видимому, чтобы убедиться, что объекты незавершенных транзакций не накапливаются в случае ошибки программиста (например, не правильно закрытия сделки) или необработанные ошибки сети
  2. Это ошибка в библиотеке JBoss JTA (или, возможно, вы используете ее неправильно, но она больше напоминает ошибку). Вы должны следовать с командой JBoss, предпочтительно с некоторыми условиями для воспроизведения
  3. Это, вероятно, связано с непроверенной сочетанием условий ошибок, вероятно, связано с сетевым уровнем, или БД, как вы догадка
0

Возможно, это ошибка в транзакциях JBoss. Стоит исследовать, является ли это ошибкой в ​​вашем собственном коде. Нить ajp-0.0.0.0-8809-19 является одним из рабочих потоков контейнера сервлетов, который выполняет ваш код. Сомнительное действие является его приобретение замка, который жнец позже хочет:

Locked ownable synchronizers: 
- locked <ed3045> (a java.util.concurrent.locks.ReentrantLock$FairSync) 

Вы можете определить точку в стеке, где он блокирует этот объект? Каков ближайший ваш код и что он делает?

Смежные вопросы