Java heap retention in oracle.jdbc.driver.T4CXAResource$XidListEntry

Solution Verified - Updated -

Issue

  • Heap dump analysis shows significant memory retained by InternalManagedConnectionPool where each managed connection has an associated TxConnectionListener which retains an OracleXAResource which, in turn, owns a Hashtable of transaction identifiers where each entry contains:
    • key: org.jboss.jca.core.tx.jbossts.XidWrapperImpl
    • value: oracle.jdbc.xa.OracleXAResource$XidListEntry
Class Name                                                                                   | Retained Heap | Shallow Heap | Percentage
-----------------------------------------------------------------------------------------------------------------------------------------
|- org.jboss.jca.core.connectionmanager.listener.TxConnectionListener @ 0x769449578          |    38,931,808 |           80 |      1.75%
|  |- org.jboss.jca.adapters.jdbc.xa.XAManagedConnection @ 0x7694495c8                       |    38,931,104 |           80 |      1.75%
|  |  |- oracle.jdbc.xa.client.OracleXAResource @ 0x76941b1d0                                |    38,633,848 |           64 |      1.73%
|  |  |  |- java.util.Hashtable @ 0x768fcb888                                                |    38,633,640 |           56 |      1.73%
|  |  |  |  '- java.util.Hashtable$Entry[417791] @ 0x7ca2e5898                               |    38,633,584 |    1,671,184 |      1.73%
|  |  |  |     |- java.util.Hashtable$Entry @ 0x7b4d6ebf8                                    |       128,000 |           32 |      0.01%
|  |  |  |     |  | ...
|  |  |  |     |  |- org.jboss.jca.core.tx.jbossts.XidWrapperImpl @ 0x7dcdaeae8              |           144 |           40 |      0.00%
|  |  |  |     |  |- oracle.jdbc.xa.OracleXAResource$XidListEntry @ 0x7db342560              |            24 |           24 |      0.00%
-----------------------------------------------------------------------------------------------------------------------------------------
  • In some cases, it is observed that there are thousands of distinct entries containing unique global/branch transaction ID pairs for transactions which have completed hours or days prior to collection of the heap dump (i.e. these persist indefinitely)
    • Individually, the Xid instances retain little memory but the accumulation over time (rate of accumulation varies with application/load) becomes significant

Environment

  • Red Hat JBoss Enterprise Application Platform (EAP) 6
    • Verified in EAP 6 but may similarly impact older EAP releases
  • Oracle JDBC driver

Subscriber exclusive content

A Red Hat subscription provides unlimited access to our knowledgebase, tools, and much more.

Current Customers and Partners

Log in for full access

Log In

New to Red Hat?

Learn more about Red Hat subscriptions

Using a Red Hat product through a public cloud?

How to access this content