Description
Poor performance and exceptions thrown when leveldb is configured with activemq while performance is measured with IBM Performance Harness. We use default configuration of activemq except that leveldb is used instead of kahadb.
Test scenario uses jms.r11.PutGet which sends a message then receives one from the same queue. Normal usage is with correlation identifier to ensure the same message is received.
Exception thrown by the broker :
WARN | Store COMMIT FAILED: scala.MatchError: null at org.apache.activemq.leveldb.DelayableUOW.dequeue(DBManager.scala:282) at org.apache.activemq.leveldb.LevelDBStore$LevelDBMessageStore.doRemove(LevelDBStore.scala:578) at org.apache.activemq.leveldb.LevelDBStore$Transaction$$anon$3.commit(LevelDBStore.scala:328) at org.apache.activemq.leveldb.LevelDBStore$$anonfun$commit$1$$anonfun$apply$10.apply(LevelDBStore.scala:381) at org.apache.activemq.leveldb.LevelDBStore$$anonfun$commit$1$$anonfun$apply$10.apply(LevelDBStore.scala:380) at scala.collection.immutable.List.foreach(List.scala:309) at scala.collection.generic.TraversableForwarder$class.foreach(TraversableForwarder.scala:32) at scala.collection.mutable.ListBuffer.foreach(ListBuffer.scala:45) at org.apache.activemq.leveldb.LevelDBStore$$anonfun$commit$1.apply(LevelDBStore.scala:380) at org.apache.activemq.leveldb.LevelDBStore$$anonfun$commit$1.apply(LevelDBStore.scala:379) at org.apache.activemq.leveldb.LevelDBStore.withUow(LevelDBStore.scala:536) at org.apache.activemq.leveldb.LevelDBStore.commit(LevelDBStore.scala:379) at org.apache.activemq.transaction.LocalTransaction.commit(LocalTransaction.java:72) at org.apache.activemq.broker.TransactionBroker.commitTransaction(TransactionBroker.java:263) at org.apache.activemq.broker.MutableBrokerFilter.commitTransaction(MutableBrokerFilter.java:103) at org.apache.activemq.broker.TransportConnection.processCommitTransactionOnePhase(TransportConnection.java:456) at org.apache.activemq.command.TransactionInfo.visit(TransactionInfo.java:100) at org.apache.activemq.broker.TransportConnection.service(TransportConnection.java:329) at org.apache.activemq.broker.TransportConnection$1.onCommand(TransportConnection.java:184) at org.apache.activemq.transport.MutexTransport.onCommand(MutexTransport.java:50) at org.apache.activemq.transport.WireFormatNegotiator.onCommand(WireFormatNegotiator.java:113) at org.apache.activemq.transport.AbstractInactivityMonitor.onCommand(AbstractInactivityMonitor.java:288) at org.apache.activemq.transport.TransportSupport.doConsume(TransportSupport.java:83) at org.apache.activemq.transport.tcp.TcpTransport.doRun(TcpTransport.java:214) at org.apache.activemq.transport.tcp.TcpTransport.run(TcpTransport.java:196) at java.lang.Thread.run(Thread.java:722) The transaction does not exist
Exception thrown by the client:
PutGet1: Uncaught exception. javax.jms.JMSException: STORE COMMIT FAILED: Transaction rolled back. at org.apache.activemq.util.JMSExceptionSupport.create(JMSExceptionSupport.java:49) at org.apache.activemq.ActiveMQConnection.syncSendPacket(ActiveMQConnection.java:1391) at org.apache.activemq.TransactionContext.syncSendPacketWithInterruptionHandling(TransactionContext.java:748) at org.apache.activemq.TransactionContext.commit(TransactionContext.java:322) at org.apache.activemq.ActiveMQSession.commit(ActiveMQSession.java:561) at com.ibm.uk.hursley.perfharness.jms.r11.PutGet.oneIteration(PutGet.java:97) at com.ibm.uk.hursley.perfharness.WorkerThread.pace(WorkerThread.java:247) at com.ibm.uk.hursley.perfharness.WorkerThread.pace(WorkerThread.java:434) at com.ibm.uk.hursley.perfharness.jms.r11.JMS11WorkerThread.run(JMS11WorkerThread.java:286) at com.ibm.uk.hursley.perfharness.jms.r11.PutGet.run(PutGet.java:86) Caused by: javax.transaction.xa.XAException: STORE COMMIT FAILED: Transaction rolled back. at org.apache.activemq.transaction.LocalTransaction.commit(LocalTransaction.java:77) at org.apache.activemq.broker.TransactionBroker.commitTransaction(TransactionBroker.java:263) at org.apache.activemq.broker.MutableBrokerFilter.commitTransaction(MutableBrokerFilter.java:103) at org.apache.activemq.broker.TransportConnection.processCommitTransactionOnePhase(TransportConnection.java:456) at org.apache.activemq.command.TransactionInfo.visit(TransactionInfo.java:100) at org.apache.activemq.broker.TransportConnection.service(TransportConnection.java:329) at org.apache.activemq.broker.TransportConnection$1.onCommand(TransportConnection.java:184) at org.apache.activemq.transport.MutexTransport.onCommand(MutexTransport.java:50) at org.apache.activemq.transport.WireFormatNegotiator.onCommand(WireFormatNegotiator.java:113) at org.apache.activemq.transport.AbstractInactivityMonitor.onCommand(AbstractInactivityMonitor.java:288) at org.apache.activemq.transport.TransportSupport.doConsume(TransportSupport.java:83) at org.apache.activemq.transport.tcp.TcpTransport.doRun(TcpTransport.java:214) at org.apache.activemq.transport.tcp.TcpTransport.run(TcpTransport.java:196) at java.lang.Thread.run(Thread.java:722) Caused by: java.lang.Throwable: scala.MatchError: null at org.apache.activemq.leveldb.DelayableUOW.dequeue(DBManager.scala:282) at org.apache.activemq.leveldb.LevelDBStore$LevelDBMessageStore.doRemove(LevelDBStore.scala:578) at org.apache.activemq.leveldb.LevelDBStore$Transaction$$anon$3.commit(LevelDBStore.scala:328) at org.apache.activemq.leveldb.LevelDBStore$$anonfun$commit$1$$anonfun$apply$10.apply(LevelDBStore.scala:381) at org.apache.activemq.leveldb.LevelDBStore$$anonfun$commit$1$$anonfun$apply$10.apply(LevelDBStore.scala:380) at scala.collection.immutable.List.foreach(List.scala:309) at scala.collection.generic.TraversableForwarder$class.foreach(TraversableForwarder.scala:32) at scala.collection.mutable.ListBuffer.foreach(ListBuffer.scala:45) at org.apache.activemq.leveldb.LevelDBStore$$anonfun$commit$1.apply(LevelDBStore.scala:380) at org.apache.activemq.leveldb.LevelDBStore$$anonfun$commit$1.apply(LevelDBStore.scala:379) at org.apache.activemq.leveldb.LevelDBStore.withUow(LevelDBStore.scala:536) at org.apache.activemq.leveldb.LevelDBStore.commit(LevelDBStore.scala:379) at org.apache.activemq.transaction.LocalTransaction.commit(LocalTransaction.java:72) ... 13 more PutGet8: STOP
After the test finished, we had several messages left in queues. We tried to read them with a different client and not in all cases we succeeded. However, after the broker restart, we could read the rest of messages.
Our results for performance testing can be found at http://wiki.test.redhat.com/MRG/Messaging/PerformanceTesting/releases/m26_m29
Attachments
Attachments
Issue Links
- is required by
-
AMQ-4485 Skipped message dispatch with concurrent transacted sends at cursor memory limit
- Resolved