I am seeing a queue being blocked in both ActiveMQMessageProducer.send() and
ActiveMQMessageConsumer.close() and no more messages can be produced or
consumed. The test case involved a client sending a single message to a
queue every 10 minutes. Another client consumed the message and produced a
new message on another queue, to be consumed by the first client.
Everything worked fine for a few hours without any problems and then the
clients would get blocked.
Environment:
- ActiveMQ 4.1.0 on Linux RedHat
- Persistent transacted messages
- JournaledJDBC with Derby
- Mule 1.3.1
This problem is readily reproducible on ActiveMQ 4.1.0 but cannot be
reproduced on ActiveMQ 3.2.2.
Thread dump of the first client with useAsyncSend=false:
"jmsConnector.jmsConnector.dispatchers.dispatcher.8" prio=1 tid=0xbf91bcc0
nid=0xab156bb0 t@-1424659536 in Object.wait() [ab155000..ab156170]
at java.lang.Object.wait(Native Method)
- waiting on <0xd1225bd8> (a
edu.emory.mathcs.backport.java.util.concurrent.locks.CondVar)
at java.lang.Object.wait(Object.java:429)
at
edu.emory.mathcs.backport.java.util.concurrent.locks.CondVar.await(CondVar.java:76)
- locked <0xd1225bd8> (a
edu.emory.mathcs.backport.java.util.concurrent.locks.CondVar)
at
edu.emory.mathcs.backport.java.util.concurrent.ArrayBlockingQueue.take(ArrayBlockingQueue.java:319)
at
org.apache.activemq.transport.FutureResponse.getResult(FutureResponse.java:42)
at
org.apache.activemq.transport.ResponseCorrelator.request(ResponseCorrelator.java:73)
at
org.apache.activemq.ActiveMQConnection.syncSendPacket(ActiveMQConnection.java:1115)
at org.apache.activemq.ActiveMQSession.send(ActiveMQSession.java:1557)
at
org.apache.activemq.ActiveMQMessageProducer.send(ActiveMQMessageProducer.java:463)
at
org.apache.activemq.ActiveMQMessageProducer.send(ActiveMQMessageProducer.java:385)
at org.mule.providers.jms.Jms11Support.send(Jms11Support.java:186)
at
org.mule.providers.jms.JmsMessageDispatcher.dispatchMessage(JmsMessageDispatcher.java:242)
at
org.mule.providers.jms.JmsMessageDispatcher.doDispatch(JmsMessageDispatcher.java:71)
at
org.mule.providers.AbstractMessageDispatcher$Worker.run(AbstractMessageDispatcher.java:488)
at org.mule.impl.work.WorkerContext.run(WorkerContext.java:301)
at
edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:665)
at
edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:690)
at java.lang.Thread.run(Thread.java:534)
"jmsConnector.jms.setTag.queue.receiver.8" prio=1 tid=0xbf9554a0
nid=0xac0f5bb0 t@-1408279632 in Object.wait() [ac0f4000..ac0f5170]
at java.lang.Object.wait(Native Method)
- waiting on <0xd120f0c8> (a
edu.emory.mathcs.backport.java.util.concurrent.locks.CondVar)
at java.lang.Object.wait(Object.java:429)
at
edu.emory.mathcs.backport.java.util.concurrent.locks.CondVar.await(CondVar.java:76)
- locked <0xd120f0c8> (a
edu.emory.mathcs.backport.java.util.concurrent.locks.CondVar)
at
edu.emory.mathcs.backport.java.util.concurrent.ArrayBlockingQueue.take(ArrayBlockingQueue.java:319)
at
org.apache.activemq.transport.FutureResponse.getResult(FutureResponse.java:42)
at
org.apache.activemq.transport.ResponseCorrelator.request(ResponseCorrelator.java:73)
at
org.apache.activemq.ActiveMQConnection.syncSendPacket(ActiveMQConnection.java:1115)
at
org.apache.activemq.ActiveMQSession.syncSendPacket(ActiveMQSession.java:1669)
at
org.apache.activemq.ActiveMQMessageConsumer.close(ActiveMQMessageConsumer.java:518)
at org.mule.providers.jms.JmsConnector.close(JmsConnector.java:792)
at
org.mule.providers.jms.JmsConnector.closeQuietly(JmsConnector.java:803)
at
org.mule.providers.jms.TransactedJmsMessageReceiver.closeConsumer(TransactedJmsMessageReceiver.java:247)
at
org.mule.providers.jms.TransactedJmsMessageReceiver.poll(TransactedJmsMessageReceiver.java:157)
at
org.mule.providers.PollingMessageReceiver.run(PollingMessageReceiver.java:71)
at org.mule.impl.work.WorkerContext.run(WorkerContext.java:301)
at
edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:665)
at
edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:690)
at java.lang.Thread.run(Thread.java:534)
If useAsyncSend is false, both the producer and consumer are blocked. If
useAsyncSend is true, only the consumer is blocked.
Thread dump of ActiveMQ Transport:
"ActiveMQ Transport: tcp:///127.0.0.1:32874" daemon prio=1 tid=0x084c1980
nid=0x1314 in Object.wait() [0xcb17d000..0xcb17e1b0]
at java.lang.Object.wait(Native Method)
- waiting on <0xd15b88e8> (a java.lang.Object)
at java.lang.Object.wait(Object.java:474)
at
org.apache.activemq.memory.UsageManager.waitForSpace(UsageManager.java:91)
- locked <0xd15b88e8> (a java.lang.Object)
at
org.apache.activemq.memory.UsageManager.waitForSpace(UsageManager.java:88)
at org.apache.activemq.broker.region.Queue.send(Queue.java:278)
at
org.apache.activemq.broker.region.AbstractRegion.send(AbstractRegion.java:292)
at
org.apache.activemq.broker.region.RegionBroker.send(RegionBroker.java:377)
at
org.apache.activemq.broker.TransactionBroker.send(TransactionBroker.java:193)
at org.apache.activemq.broker.BrokerFilter.send(BrokerFilter.java:126)
at
org.apache.activemq.broker.CompositeDestinationBroker.send(CompositeDestinationBroker.java:98)
at
org.apache.activemq.broker.MutableBrokerFilter.send(MutableBrokerFilter.java:136)
at
org.apache.activemq.broker.TransportConnection.processMessage(TransportConnection.java:480)
at
org.apache.activemq.command.ActiveMQMessage.visit(ActiveMQMessage.java:604)
at
org.apache.activemq.broker.TransportConnection.service(TransportConnection.java:284)
at
org.apache.activemq.broker.TransportConnection$1.onCommand(TransportConnection.java:177)
at
org.apache.activemq.transport.TransportFilter.onCommand(TransportFilter.java:65)
at
org.apache.activemq.transport.WireFormatNegotiator.onCommand(WireFormatNegotiator.java:133)
at
org.apache.activemq.transport.InactivityMonitor.onCommand(InactivityMonitor.java:122)
at
org.apache.activemq.transport.TransportSupport.doConsume(TransportSupport.java:84)
at
org.apache.activemq.transport.tcp.TcpTransport.run(TcpTransport.java:137)
at java.lang.Thread.run(Thread.java:595)
--
View this message in context: http://www.nabble.com/Message-queue-getting-blocked-in-both-ActiveMQMessageProducer-and-ActiveMQMessageConsumer-tf3335338s2354.html#a9275536
Sent from the ActiveMQ - User mailing list archive at Nabble.com.
|