JTA Deadlock Against 'weblogic.transaction.TxTimer' Thread (Doc ID 1516607.1)

Last updated on NOVEMBER 05, 2016

Applies to:

Oracle WebLogic Server - Version 10.3.4 to 12.1.1.0
Information in this document applies to any platform.

Symptoms

The problem is a deadlock that can be detected within WebLogic Server 10.3.4. Taking a Java thread dump of  Weblogic  Server, the following message can be seen : 

Deadlock Found !!!
 Thread: "ExecuteThread: '0' for queue: 'default'" is blocked for Lock [ (a weblogic.transaction.internal.ClientTransactionManagerImpl)], held by Thread: "weblogic.transaction.TxTimer: '1'" Thread: "weblogic.transaction.TxTimer: '1'" is blocked for Lock [ (a weblogic.transaction.internal.ClientTransactionImpl)], held by Thread: "ExecuteThread: '0' for queue: 'default'"

This deadlock is between the Weblogic Server  "weblogic.transaction.TxTimer" thread and "ExecuteThread" thread which is processing JTA transaction.
 Here are the related Java Thread Stacks of those threads :

"ExecuteThread: '0' for queue: 'default'" waiting for lock : (a weblogic.transaction.internal.ClientTransactionManagerImpl) held by Thread: "weblogic.transaction.TxTimer: '1'"
"ExecuteThread: '0' for queue: 'default'" daemon prio=3 tid=0x09530400 nid=0x20 waiting for monitor entry [0xd4f4b000]
  java.lang.Thread.State: BLOCKED (on object monitor)
at weblogic.transaction.internal.TransactionManagerImpl.remove(TransactionManagerImpl.java:1754)
- waiting to lock (a weblogic.transaction.internal.ClientTransactionManagerImpl)
at weblogic.transaction.internal.ClientTransactionImpl.setRolledBack(ClientTransactionImpl.java:260)
- locked (a weblogic.transaction.internal.ClientTransactionImpl)
at weblogic.transaction.internal.TransactionImpl.localRollback(TransactionImpl.java:1705)
at weblogic.transaction.internal.TransactionImpl.globalRollback(TransactionImpl.java:1656)
at weblogic.transaction.internal.TransactionImpl$3.run(TransactionImpl.java:2000)
at weblogic.work.ExecuteRequestAdapter.execute(ExecuteRequestAdapter.java:21)
at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:145)
at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:117)
  
"weblogic.transaction.TxTimer: '1'" waiting for lock : (a weblogic.transaction.internal.ClientTransactionImpl) held by Thread: "ExecuteThread: '0' for queue: 'default'"
"weblogic.transaction.TxTimer: '1'" daemon prio=3 tid=0x082dc400 nid=0x27 waiting for monitor entry [0xd4a3a000]
  java.lang.Thread.State: BLOCKED (on object monitor)
at weblogic.transaction.internal.TransactionImpl.getProperty(TransactionImpl.java:760)
- waiting to lock (a weblogic.transaction.internal.ClientTransactionImpl)
at weblogic.transaction.internal.TransactionImpl.isImportedTransaction(TransactionImpl.java:1568)
at weblogic.transaction.internal.TransactionManagerImpl.remove(TransactionManagerImpl.java:1755)
- locked (a weblogic.transaction.internal.ClientTransactionManagerImpl)
at weblogic.transaction.internal.TransactionImpl.wakeUp(TransactionImpl.java:1519)
at weblogic.transaction.internal.TransactionManagerImpl.processTimedOutTransactions(TransactionManagerImpl.java:1932)
at weblogic.transaction.internal.TransactionManagerImpl.wakeUp(TransactionManagerImpl.java:1911)
at weblogic.transaction.internal.GenericTimer.run(GenericTimer.java:17)
at java.lang.Thread.run(Thread.java:662)

Cause

Sign In with your My Oracle Support account

Don't have a My Oracle Support account? Click to get started

My Oracle Support provides customers with access to over a
Million Knowledge Articles and hundreds of Community platforms