You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@activemq.apache.org by "Jean-Baptiste Onofré (Jira)" <ji...@apache.org> on 2020/02/27 19:18:00 UTC

[jira] [Updated] (AMQ-7424) NPE under very high database load

     [ https://issues.apache.org/jira/browse/AMQ-7424?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Jean-Baptiste Onofré updated AMQ-7424:
--------------------------------------
    Fix Version/s: 5.15.12
                   5.16.0

> NPE under very high database load
> ---------------------------------
>
>                 Key: AMQ-7424
>                 URL: https://issues.apache.org/jira/browse/AMQ-7424
>             Project: ActiveMQ
>          Issue Type: Bug
>          Components: JDBC
>    Affects Versions: 5.15.11
>            Reporter: Terje Strand
>            Assignee: Jean-Baptiste Onofré
>            Priority: Major
>             Fix For: 5.16.0, 5.15.12
>
>
> Under abnormally heavy database loads we get a lot of transactions timeouts in our application as one would expect. Our application uses XA with Postgres and ActiveMQ. Problem is that after the abnormality goes away, the system does not recover.
>  
> During these failures, we get a NPE that causes ActiveMQ to lose a database connection and the connection is never returned to the connection pool (Hikari). After the abnormality is removed, and the database is responsive again, the system never recovers as the connection pool is out-of-resources.
>  
> Through debugging, we believe the following causes the connection leak in ActiveMQs handing:
> {quote}Caused by: javax.jms.JMSException: java.lang.NullPointerException
>  at org.apache.activemq.util.JMSExceptionSupport.create(JMSExceptionSupport.java:54) ~[activemq-client-5.15.11.jar:5.15.11]
>  at org.apache.activemq.ActiveMQConnection.syncSendPacket(ActiveMQConnection.java:1403) ~[activemq-client-5.15.11.jar:5.15.11]
>  at org.apache.activemq.ActiveMQConnection.syncSendPacket(ActiveMQConnection.java:1436) ~[activemq-client-5.15.11.jar:5.15.11]
>  at org.apache.activemq.TransactionContext.rollback(TransactionContext.java:538) ~[activemq-client-5.15.11.jar:5.15.11]
>  ... 134 more
>  Caused by: java.lang.NullPointerException
>  at org.apache.activemq.store.jdbc.JDBCPersistenceAdapter.commitRemove(JDBCPersistenceAdapter.java:795) ~[activemq-jdbc-store-5.15.11.jar:5.15.11]
>  at org.apache.activemq.store.jdbc.JdbcMemoryTransactionStore.rollback(JdbcMemoryTransactionStore.java:171) ~[activemq-jdbc-store-5.15.11.jar:5.15.11]
>  at org.apache.activemq.transaction.XATransaction.rollback(XATransaction.java:146) ~[activemq-broker-5.15.11.jar:5.15.11]
>  at org.apache.activemq.broker.TransactionBroker.rollbackTransaction(TransactionBroker.java:257) ~[activemq-broker-5.15.11.jar:5.15.11]
>  at org.apache.activemq.broker.BrokerFilter.rollbackTransaction(BrokerFilter.java:149) ~[activemq-broker-5.15.11.jar:5.15.11]
>  at org.apache.activemq.broker.BrokerFilter.rollbackTransaction(BrokerFilter.java:149) ~[activemq-broker-5.15.11.jar:5.15.11]
>  at org.apache.activemq.broker.TransportConnection.processRollbackTransaction(TransportConnection.java:553) ~[activemq-broker-5.15.11.jar:5.15.11]
>  at org.apache.activemq.command.TransactionInfo.visit(TransactionInfo.java:104) ~[activemq-client-5.15.11.jar:5.15.11]
>  at org.apache.activemq.broker.TransportConnection.service(TransportConnection.java:336) ~[activemq-broker-5.15.11.jar:5.15.11]
>  at org.apache.activemq.broker.TransportConnection$1.onCommand(TransportConnection.java:200) ~[activemq-broker-5.15.11.jar:5.15.11]
>  at org.apache.activemq.transport.MutexTransport.onCommand(MutexTransport.java:50) ~[activemq-client-5.15.11.jar:5.15.11]
>  at org.apache.activemq.transport.WireFormatNegotiator.onCommand(WireFormatNegotiator.java:125) ~[activemq-client-5.15.11.jar:5.15.11]
>  at org.apache.activemq.transport.AbstractInactivityMonitor.onCommand(AbstractInactivityMonitor.java:301) ~[activemq-client-5.15.11.jar:5.15.11]
>  at org.apache.activemq.transport.TransportSupport.doConsume(TransportSupport.java:83) ~[activemq-client-5.15.11.jar:5.15.11]
>  at org.apache.activemq.transport.tcp.TcpTransport.doRun(TcpTransport.java:233) ~[activemq-client-5.15.11.jar:5.15.11]
>  at org.apache.activemq.transport.tcp.TcpTransport.run(TcpTransport.java:215) ~[activemq-client-5.15.11.jar:5.15.11]
>  ... 1 more
> {quote}
>  
> By overloading the method 'commitRemoved(...)' in 'JDBCPersistenceAdapter' and converting the NullPointerException above to an IOException, the connection handling code behaves as expected, we see no connection leak, and the system recovers correctly after the load abnormality has passed.
>  
> There is a very large number of things going wrong when these NPEs occur and its near impossible for us (not being experts at ActiveMQ) to see what the underlying cause for these exceptions are. However, for us, the most important is that we recover-



--
This message was sent by Atlassian Jira
(v8.3.4#803005)