[ https://issues.apache.org/activemq/browse/AMQ-2389?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Chad Showalter updated AMQ-2389: -------------------------------- Attachment: screenshot-1.jpg > ActiveMQ hangs on SocketWrite0() with fast producer / slow consumer after > MemoryLimit is reached > ------------------------------------------------------------------------------------------------ > > Key: AMQ-2389 > URL: https://issues.apache.org/activemq/browse/AMQ-2389 > Project: ActiveMQ > Issue Type: Bug > Affects Versions: 5.2.0 > Environment: $ cat /proc/version > Linux version 2.6.18-6-amd64 (Debian 2.6.18.dfsg.1-23etch1) > (da...@debian.org) (gcc version 4.1.2 20061115 (prerelease) (Debian > 4.1.1-21)) #1 SMP Fri Dec 12 05:49:32 UTC 2008 > OS X > Reporter: Chad Showalter > Fix For: 5.2.0 > > Attachments: ActiveMQSpamTest1.java, screenshot-1.jpg > > > When persistent=true for the broker, a fast producer / slow consumer may > cause ActiveMQ to block on a SocketWrite0() call. The following thread dump > signature results: > ... > "ActiveMQ Transport: tcp://localhost/127.0.0.1:61610" prio=5 > tid=0x0000000101942000 nid=0x1548c4000 waiting for monitor entry > [0x00000001548c3000..0x00000001548c3a50] > java.lang.Thread.State: BLOCKED (on object monitor) > at > org.apache.activemq.transport.InactivityMonitor.oneway(InactivityMonitor.java:220) > - waiting to lock <0x0000000107d29848> (a > java.util.concurrent.atomic.AtomicBoolean) > at > org.apache.activemq.transport.InactivityMonitor.onCommand(InactivityMonitor.java:185) > at > org.apache.activemq.transport.TransportSupport.doConsume(TransportSupport.java:84) > at > org.apache.activemq.transport.tcp.TcpTransport.doRun(TcpTransport.java:203) > at > org.apache.activemq.transport.tcp.TcpTransport.run(TcpTransport.java:185) > at java.lang.Thread.run(Thread.java:637) > ... > "main" prio=5 tid=0x0000000101805000 nid=0x101201000 runnable > [0x0000000101200000..0x0000000101200ba0] > java.lang.Thread.State: RUNNABLE > at java.net.SocketOutputStream.socketWrite0(Native Method) > at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92) > at java.net.SocketOutputStream.write(SocketOutputStream.java:136) > at > org.apache.activemq.transport.tcp.TcpBufferedOutputStream.flush(TcpBufferedOutputStream.java:115) > at java.io.DataOutputStream.flush(DataOutputStream.java:106) > at > org.apache.activemq.transport.tcp.TcpTransport.oneway(TcpTransport.java:167) > at > org.apache.activemq.transport.InactivityMonitor.oneway(InactivityMonitor.java:233) > - locked <0x0000000107d29848> (a > java.util.concurrent.atomic.AtomicBoolean) > at > org.apache.activemq.transport.TransportFilter.oneway(TransportFilter.java:83) > at > org.apache.activemq.transport.WireFormatNegotiator.oneway(WireFormatNegotiator.java:100) > at > org.apache.activemq.transport.MutexTransport.oneway(MutexTransport.java:40) > - locked <0x0000000107d299b0> (a java.lang.Object) > at > org.apache.activemq.transport.ResponseCorrelator.oneway(ResponseCorrelator.java:60) > at > org.apache.activemq.ActiveMQConnection.doAsyncSendPacket(ActiveMQConnection.java:1214) > at > org.apache.activemq.ActiveMQConnection.asyncSendPacket(ActiveMQConnection.java:1208) > at org.apache.activemq.ActiveMQSession.send(ActiveMQSession.java:1643) > - locked <0x0000000107d35a68> (a java.lang.Object) > at > org.apache.activemq.ActiveMQMessageProducer.send(ActiveMQMessageProducer.java:227) > at > org.apache.activemq.ActiveMQMessageProducerSupport.send(ActiveMQMessageProducerSupport.java:300) > at com.chad.test.ActiveMQSpamTest1.runTest(ActiveMQSpamTest1.java:73) > - locked <0x0000000107ca6680> (a > org.apache.activemq.ActiveMQMessageProducer) > at com.chad.test.ActiveMQSpamTest1.main(ActiveMQSpamTest1.java:117) > The attached test instantiates an embedded broker and consistently duplicates > the problem on my machine (Macbook Pro running Leopard). The test duplicates > behavior we see in production code, which is running an embedded broker on > Debian Linux. > I run the test in Eclipse with -Xmx1100mb. The output I see (after a minute > or so) is: > ... > SENT a (mod 10000) message: i=0 > SENT a (mod 10000) message: i=10000 > SENT a (mod 10000) message: i=20000 > SENT a (mod 10000) message: i=30000 > SENT a (mod 10000) message: i=40000 > SENT a (mod 10000) message: i=50000 > Sep 11, 2009 3:28:13 PM org.apache.activemq.kaha.impl.KahaStore initialize > INFO: Kaha Store using data directory activemq-data/localhost/tmp_storage > RECEIVED a (mod 10000) message: i=10000 > RECEIVED a (mod 10000) message: i=20000 > RECEIVED a (mod 10000) message: i=30000 > RECEIVED a (mod 10000) message: i=40000 > RECEIVED a (mod 10000) message: i=50000 > after which no further messages are processed, and a thread dump includes the > signature shown above. Uncommenting the line > broker.setPersistent(false); > results in the test running to completion (all messages are sent/consumed), > with the following output: > SENT a (mod 10000) message: i=0 > SENT a (mod 10000) message: i=10000 > SENT a (mod 10000) message: i=20000 > SENT a (mod 10000) message: i=30000 > SENT a (mod 10000) message: i=40000 > SENT a (mod 10000) message: i=50000 > SENT a (mod 10000) message: i=60000 > RECEIVED a (mod 10000) message: i=10000 > DONE sending messages > RECEIVED a (mod 10000) message: i=20000 > RECEIVED a (mod 10000) message: i=30000 > RECEIVED a (mod 10000) message: i=40000 > RECEIVED a (mod 10000) message: i=50000 > RECEIVED a (mod 10000) message: i=60000 -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.