That stack trace looks more like a wait than a deadlock? Are you sure its a real deadlock?
This FAQ entry should help http://activemq.apache.org/my-producer-blocks.html On 5/15/07, Jason Rosenberg <[EMAIL PROTECTED]> wrote:
Hi all, I'm just using ActiveMQ for the first time. I've encountered a deadlock condition, that appears rooted in the ActiveMQ internals. I'm not sure if this is a known problem or not. I've been able to work around the issue, but thought I'd forward this on, to see if it warrants filing a bug, or if it's a 'feature'.... I am using version 4.1.1, and am running it within tomcat 5.5.23, using the vm://localhost broker, and am using non-persistent messaging, with AUTO_ACKNOWLEDGE. I am using queues, and the consumers are triggered using the setMessageListener api. Essentially what seems to be happening is that the producer generates more messages than the consumer can keep up with, and eventually appears to cause the message queue to run out of space. What I would expect in this case, is that the consumer would still be able to process messages, at it's own slow pace....and as it processes messages, space would open up in the queue, and the producer would be able to slowly continue submitting more messages.... I realize normally this is not an ideal use of messaging, e.g. you don't want to generate more messages than you can possibly consume, etc....However, I would expect that it would still make progress, etc.. I am instead seeing a simple deadlock condition, the producer locks up while waiting for space, and locks a monitor that the consumer appears to be waiting on....I've included a partial thread dump below, with the 2 relevant threads: "ActiveMQ Session Task" daemon prio=7 tid=0x0055be30 nid=0x18ac000 waiting for monitor entry [0xb1820000..0xb1820d10] at org.apache.activemq.transport.MutexTransport.oneway(MutexTransport.java:46) - waiting to lock <0x2704bef8> (a java.lang.Object) at org.apache.activemq.transport.ResponseCorrelator.oneway(ResponseCorrelator.java:60) at org.apache.activemq.ActiveMQConnection.asyncSendPacket(ActiveMQConnection.java:1155) at org.apache.activemq.ActiveMQSession.asyncSendPacket(ActiveMQSession.java:1651) at org.apache.activemq.ActiveMQMessageConsumer.afterMessageIsConsumed(ActiveMQMessageConsumer.java:679) at org.apache.activemq.ActiveMQMessageConsumer.dispatch(ActiveMQMessageConsumer.java:855) at org.apache.activemq.ActiveMQSessionExecutor.dispatch(ActiveMQSessionExecutor.java:99) at org.apache.activemq.ActiveMQSessionExecutor.iterate(ActiveMQSessionExecutor.java:166) at org.apache.activemq.thread.PooledTaskRunner.runTask(PooledTaskRunner.java:117) at org.apache.activemq.thread.PooledTaskRunner.access$100(PooledTaskRunner.java:26) at org.apache.activemq.thread.PooledTaskRunner$1.run(PooledTaskRunner.java:44) at edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:650) at edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:675) at java.lang.Thread.run(Thread.java:613) "http-8080-Processor25" daemon prio=5 tid=0x00540ed0 nid=0x1902800 in Object.wait() [0xb27bf000..0xb27bfd10] at java.lang.Object.wait(Native Method) - waiting on <0x2702d7c8> (a java.lang.Object) at org.apache.activemq.memory.UsageManager.waitForSpace(UsageManager.java:105) - locked <0x2702d7c8> (a java.lang.Object) at org.apache.activemq.memory.UsageManager.waitForSpace(UsageManager.java:100) at org.apache.activemq.broker.region.Queue.send(Queue.java:318) at org.apache.activemq.broker.region.AbstractRegion.send(AbstractRegion.java:292) at org.apache.activemq.broker.region.RegionBroker.send(RegionBroker.java:382) 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:498) at org.apache.activemq.command.ActiveMQMessage.visit(ActiveMQMessage.java:604) at org.apache.activemq.broker.TransportConnection.service(TransportConnection.java:294) at org.apache.activemq.broker.TransportConnection$1.onCommand(TransportConnection.java:185) at org.apache.activemq.transport.ResponseCorrelator.onCommand(ResponseCorrelator.java:95) at org.apache.activemq.transport.TransportFilter.onCommand(TransportFilter.java:65) at org.apache.activemq.transport.vm.VMTransport.syncOneWay(VMTransport.java:96) at org.apache.activemq.transport.vm.VMTransport.oneway(VMTransport.java:83) at org.apache.activemq.transport.MutexTransport.oneway(MutexTransport.java:47) - locked <0x2704bef8> (a java.lang.Object) at org.apache.activemq.transport.ResponseCorrelator.oneway(ResponseCorrelator.java:60) at org.apache.activemq.ActiveMQConnection.asyncSendPacket(ActiveMQConnection.java:1155) at org.apache.activemq.ActiveMQSession.send(ActiveMQSession.java:1549) at org.apache.activemq.ActiveMQMessageProducer.send(ActiveMQMessageProducer.java:465) at org.apache.activemq.ActiveMQMessageProducer.send(ActiveMQMessageProducer.java:356) at com.shopzilla.utils.NonPersistentLocalMessaging.sendMessage(NonPersistentLocalMessaging.java:208) at com.shopzilla.its.ws.ITSSessionizationFileCollector._sendDataListMessage(ITSSessionizationFileCollector.java:140) at com.shopzilla.its.ws.ITSSessionizationFileCollector.doPost(ITSSessionizationFileCollector.java:101) at javax.servlet.http.HttpServlet.service(HttpServlet.java:710) at javax.servlet.http.HttpServlet.service(HttpServlet.java:803) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:210) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:870) at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665) at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528) at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81) at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:685) at java.lang.Thread.run(Thread.java:613) Thanks, Jason -- View this message in context: http://www.nabble.com/Deadlock-condition%2C-producer-in-waitForSpace%2C-consumer-slow%2C-etc.-tf3759923s2354.html#a10627274 Sent from the ActiveMQ - User mailing list archive at Nabble.com.
-- James ------- http://macstrac.blogspot.com/