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

Dejan Bosanac updated AMQ-2749:
-------------------------------

    Fix Version/s:     (was: 5.4.2)
                   5.5.0

> Broker hangs in TopicSubscription.add
> -------------------------------------
>
>                 Key: AMQ-2749
>                 URL: https://issues.apache.org/jira/browse/AMQ-2749
>             Project: ActiveMQ
>          Issue Type: Bug
>          Components: Broker
>    Affects Versions: 5.3.1
>         Environment: red had enterprise
>            Reporter: Dennis Klinkott
>             Fix For: 5.5.0
>
>         Attachments: activemq.xml, jmx console screenshot.jpg, 
> jstack.2010-05-25-14-01-30, jstack.2010-05-25-14-10-54
>
>
> Our broker suddenly hang in production environment. We created a bunch of 
> jstacks to see what the reason is.
> The jstacks show that the broker waits with many threads in doMessageSend:
> e.g.
> "ActiveMQ Transport: tcp:///10.231.233.117:51088" daemon prio=10 
> tid=0x00002aab84016800 nid=0x1f19 waiting for monitor entry 
> [0x000000006a8f2000]
>    java.lang.Thread.State: BLOCKED (on object monitor)
>       at org.apache.activemq.broker.region.Topic.doMessageSend(Topic.java:402)
>       - waiting to lock <0x00002aaab46f8938> (a 
> org.apache.activemq.broker.region.Topic)
>       at org.apache.activemq.broker.region.Topic.send(Topic.java:384)
>       at 
> org.apache.activemq.broker.region.DestinationFilter.send(DestinationFilter.java:93)
>       at 
> org.apache.activemq.broker.region.virtual.VirtualTopicInterceptor.send(VirtualTopicInterceptor.java:46)
>       at 
> org.apache.activemq.broker.region.AbstractRegion.send(AbstractRegion.java:354)
>       at 
> org.apache.activemq.broker.region.RegionBroker.send(RegionBroker.java:445)
>       at 
> org.apache.activemq.broker.TransactionBroker.send(TransactionBroker.java:224)
>       at 
> org.apache.activemq.advisory.AdvisoryBroker.fireAdvisory(AdvisoryBroker.java:443)
>       at 
> org.apache.activemq.advisory.AdvisoryBroker.fireAdvisory(AdvisoryBroker.java:373)
>       at 
> org.apache.activemq.advisory.AdvisoryBroker.fireAdvisory(AdvisoryBroker.java:368)
>       at 
> org.apache.activemq.advisory.AdvisoryBroker.addDestinationInfo(AdvisoryBroker.java:173)
>       at 
> org.apache.activemq.broker.BrokerFilter.addDestinationInfo(BrokerFilter.java:214)
>       at 
> org.apache.activemq.broker.BrokerFilter.addDestinationInfo(BrokerFilter.java:214)
>       at 
> org.apache.activemq.broker.MutableBrokerFilter.addDestinationInfo(MutableBrokerFilter.java:221)
>       at 
> org.apache.activemq.broker.TransportConnection.processAddDestination(TransportConnection.java:467)
>       at 
> org.apache.activemq.command.DestinationInfo.visit(DestinationInfo.java:122)
>       at 
> org.apache.activemq.broker.TransportConnection.service(TransportConnection.java:300)
>       at 
> org.apache.activemq.broker.TransportConnection$1.onCommand(TransportConnection.java:178)
>       at 
> org.apache.activemq.transport.TransportFilter.onCommand(TransportFilter.java:68)
>       at 
> org.apache.activemq.transport.stomp.StompTransportFilter.sendToActiveMQ(StompTransportFilter.java:82)
>       at 
> org.apache.activemq.transport.stomp.ProtocolConverter.sendToActiveMQ(ProtocolConverter.java:135)
>       at 
> org.apache.activemq.transport.stomp.ProtocolConverter.createTempQueue(ProtocolConverter.java:611)
>       at 
> org.apache.activemq.transport.stomp.LegacyFrameTranslator.convertDestination(LegacyFrameTranslator.java:130)
>       at 
> org.apache.activemq.transport.stomp.FrameTranslator$Helper.copyStandardHeadersFromFrameToMessage(FrameTranslator.java:93)
>       at 
> org.apache.activemq.transport.stomp.LegacyFrameTranslator.convertFrame(LegacyFrameTranslator.java:54)
>       at 
> org.apache.activemq.transport.stomp.ProtocolConverter.convertMessage(ProtocolConverter.java:591)
>       at 
> org.apache.activemq.transport.stomp.ProtocolConverter.onStompSend(ProtocolConverter.java:231)
>       at 
> org.apache.activemq.transport.stomp.ProtocolConverter.onStompCommand(ProtocolConverter.java:173)
>       at 
> org.apache.activemq.transport.stomp.StompTransportFilter.onCommand(StompTransportFilter.java:71)
>       at 
> org.apache.activemq.transport.TransportSupport.doConsume(TransportSupport.java:84)
>       at 
> org.apache.activemq.transport.tcp.TcpTransport.doRun(TcpTransport.java:204)
>       at 
> org.apache.activemq.transport.tcp.TcpTransport.run(TcpTransport.java:186)
>       at java.lang.Thread.run(Thread.java:619)
> It is waiting to lock 0x00002aaab46f8938. This is the thread that holds the 
> lock:
> "ActiveMQ Transport: tcp:///10.231.233.117:43020" daemon prio=10 
> tid=0x00000000608d8800 nid=0xc6e in Object.wait() [0x000000007d41c000]
>    java.lang.Thread.State: TIMED_WAITING (on object monitor)
>       at java.lang.Object.wait(Native Method)
>       at 
> org.apache.activemq.broker.region.TopicSubscription.add(TopicSubscription.java:106)
>       - locked <0x00002aaab57d34e8> (a java.lang.Object)
>       at 
> org.apache.activemq.broker.region.policy.SimpleDispatchPolicy.dispatch(SimpleDispatchPolicy.java:49)
>       - locked <0x00002aaab46f98e0> (a 
> java.util.concurrent.CopyOnWriteArrayList)
>       at org.apache.activemq.broker.region.Topic.dispatch(Topic.java:585)
>       at org.apache.activemq.broker.region.Topic.doMessageSend(Topic.java:443)
>       - locked <0x00002aaab46f8938> (a 
> org.apache.activemq.broker.region.Topic)
>       at org.apache.activemq.broker.region.Topic.send(Topic.java:384)
>       at 
> org.apache.activemq.broker.region.DestinationFilter.send(DestinationFilter.java:93)
>       at 
> org.apache.activemq.broker.region.virtual.VirtualTopicInterceptor.send(VirtualTopicInterceptor.java:46)
>       at 
> org.apache.activemq.broker.region.AbstractRegion.send(AbstractRegion.java:354)
>       at 
> org.apache.activemq.broker.region.RegionBroker.send(RegionBroker.java:445)
>       at 
> org.apache.activemq.broker.TransactionBroker.send(TransactionBroker.java:224)
>       at 
> org.apache.activemq.advisory.AdvisoryBroker.fireAdvisory(AdvisoryBroker.java:443)
>       at 
> org.apache.activemq.advisory.AdvisoryBroker.fireAdvisory(AdvisoryBroker.java:373)
>       at 
> org.apache.activemq.advisory.AdvisoryBroker.fireAdvisory(AdvisoryBroker.java:368)
>       at 
> org.apache.activemq.advisory.AdvisoryBroker.removeDestination(AdvisoryBroker.java:185)
>       at 
> org.apache.activemq.broker.BrokerFilter.removeDestination(BrokerFilter.java:146)
>       at 
> org.apache.activemq.broker.BrokerFilter.removeDestination(BrokerFilter.java:146)
>       at 
> org.apache.activemq.broker.MutableBrokerFilter.removeDestination(MutableBrokerFilter.java:153)
>       at 
> org.apache.activemq.broker.TransportConnection.processRemoveConnection(TransportConnection.java:713)
>       - locked <0x00002aaac32b10c0> (a 
> org.apache.activemq.broker.jmx.ManagedTransportConnection)
>       at org.apache.activemq.command.RemoveInfo.visit(RemoveInfo.java:72)
>       at 
> org.apache.activemq.broker.TransportConnection.service(TransportConnection.java:300)
>       at 
> org.apache.activemq.broker.TransportConnection$1.onCommand(TransportConnection.java:178)
>       at 
> org.apache.activemq.transport.TransportFilter.onCommand(TransportFilter.java:68)
>       at 
> org.apache.activemq.transport.stomp.StompTransportFilter.sendToActiveMQ(StompTransportFilter.java:82)
>       at 
> org.apache.activemq.transport.stomp.ProtocolConverter.sendToActiveMQ(ProtocolConverter.java:135)
>       at 
> org.apache.activemq.transport.stomp.ProtocolConverter.onStompDisconnect(ProtocolConverter.java:545)
>       at 
> org.apache.activemq.transport.stomp.ProtocolConverter.onStompCommand(ProtocolConverter.java:189)
>       at 
> org.apache.activemq.transport.stomp.StompTransportFilter.onCommand(StompTransportFilter.java:71)
>       at 
> org.apache.activemq.transport.TransportSupport.doConsume(TransportSupport.java:84)
>       at 
> org.apache.activemq.transport.tcp.TcpTransport.doRun(TcpTransport.java:204)
>       at 
> org.apache.activemq.transport.tcp.TcpTransport.run(TcpTransport.java:186)
>       at java.lang.Thread.run(Thread.java:619)
> So it is the client 10.231.233.117 that has a stomp-connection to the broker, 
> causes a TopicSubscription.add and causes the broker freeze. 
> This is how we configure our openwire transport-connector in the activemq.xml:
>         <transportConnectors>
>             <transportConnector name="openwire" uri="tcp://0.0.0.0:61616"/>
>             <transportConnector name="stomp" uri="stomp://0.0.0.0:61613"/>
>         </transportConnectors>
> We took jstack-dumps with a distance of 9 minutes. Both are attached. In both 
> dumps it is the same TopicSubscription.add that causes the hang.
> How can we solve this issue? Looks like the connection should run into an 
> timeout but doesn't. Is this an activemq bug? Can we somehow set the broker 
> openwire timeout parameters?
> Thanks for any hints.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to