Maxence Dunnewind created AMQ-6473:
--------------------------------------

             Summary: Old destination GC blocks other requests
                 Key: AMQ-6473
                 URL: https://issues.apache.org/jira/browse/AMQ-6473
             Project: ActiveMQ
          Issue Type: Bug
          Components: Broker
    Affects Versions: 5.14.1
            Reporter: Maxence Dunnewind


Using ActiveMQ with 5.14.1, we create a lot of topics through a WSS + Stomp 
setup. We have enabled :

 * keepalive for consumers ( every 25s)
 * GC for old destinations (topics)

The current relevant config is :

{quote}
   <!-- Check for destination purge every minute (ie every 60 000 ms) -->
        <broker xmlns="http://activemq.apache.org/schema/core"; 
brokerName="broker-main" dataDirectory="${activemq.data}" 
schedulePeriodForDestinationPurge="60000">

                <destinationPolicy>
                        <policyMap>
                                <policyEntries>
                    <!-- Remove topic inactive since 30 minutes (aka 30 * 600 s 
aka 600000ms) -->
                                        <policyEntry topic="&gt;" 
gcInactiveDestinations="true" inactiveTimoutBeforeGC="1800000">
                                                <!-- The 
constantPendingMessageLimitStrategy is used to prevent
                                                 slow topic consumers to block 
producers and affect other consumers
                                                 by limiting the number of 
messages that are retained
                                                 For more information, see:

                                                 
http://activemq.apache.org/slow-consumer-handling.html

                                        -->
                  <deadLetterStrategy>
                       <sharedDeadLetterStrategy processExpired="false" />
                  </deadLetterStrategy>
                                  <pendingMessageLimitStrategy>
                                          <constantPendingMessageLimitStrategy 
limit="1000"/>
                                  </pendingMessageLimitStrategy>
                          </policyEntry>
                  </policyEntries>
          </policyMap>
  </destinationPolicy>
[...]
               <transportConnectors>
            <transportConnector name="stomp" 
uri="stomp://0.0.0.0:61613?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600?transport.closeAsync=false"/>

            <transportConnector name="ws" 
uri="ws://0.0.0.0:61614?maximumConnections=100000&amp;wireFormat.maxFrameSize=104857600?transport.closeAsync=false"/>

            <transportConnector name="wss" 
uri="wss://0.0.0.0:61624?maximumConnections=100000&amp;wireFormat.maxFrameSize=104857600?transport.closeAsync=false"/>

                </transportConnectors>
{quote}

However, it seems that when a lot of topics are removed (I'm almost sure that 
topic created for less than 30 minutes are removed btw, still need to check 
this) , the whole broker is almost blocked. Has side effects :

 * a lot of clients are disconnected with :
{quote}
Transport Connection to: wss://X.X.X.X:56088 failed: 
org.apache.activemq.transport.InactivityIOException: Channel was inactive (no 
connection attempt made) for too (>30000) long: wss://85.95.201.56:56088 | 
org.apache.activemq.broker.TransportConnection.Transport | ActiveMQ 
InactivityMonitor Worker
{quote}

 * when I try to curl http://localhost:8161/admin/xml/topics.jsp  I get an 
exception in the logs :

{quote}

19: <c:forEach items="${requestContext.brokerQuery.topics}" var="row">
20: <topic name="<c:out value="${row.name}"/> ">
21:
22:   <stats size="${row.queueSize}"
23:          consumerCount="${row.consumerCount}"


Stacktrace:
        at 
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:568)[apache-jsp-8.0.9.M3.jar:2.3]
        at 
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:470)[apache-jsp-8.0.9.M3.jar:2.3]
        at 
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:405)[apache-jsp-8.0.9.M3.jar:2.3]
        at 
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:349)[apache-jsp-8.0.9.M3.jar:2.3]
        at 
org.eclipse.jetty.jsp.JettyJspServlet.service(JettyJspServlet.java:107)[apache-jsp-9.2.13.v20150730.jar:9.2.13.v20150730]
        at 
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)[tomcat-servlet-api-8.0.24.jar:]
        at 
org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:808)[jetty-all-9.2.13.v20150730.jar:9.2.13.v20150730]
        at 
org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1669)[jetty-all-9.2.13.v20150730.jar:9.2.13.v20150730]
        at 
org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99)[spring-web-4.1.9.RELEASE.jar:4.1.9.RELEASE]
        at 
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)[spring-web-4.1.9.RELEASE.jar:4.1.9.RELEASE]
        at 
org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652)[jetty-all-9.2.13.v20150730.jar:9.2.13.v20150730]
        at 
org.apache.activemq.web.SessionFilter.doFilter(SessionFilter.java:45)[activemq-web-5.14.1.jar:5.14.1]
        at 
org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652)[jetty-all-9.2.13.v20150730.jar:9.2.13.v20150730]
        at 
org.apache.activemq.web.filter.ApplicationContextFilter.doFilter(ApplicationContextFilter.java:102)[file:/opt/apache-activemq-5.14.1/webapps/admin/WEB-INF/classes/:]
        at 
org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652)[jetty-all-9.2.13.v20150730.jar:9.2.13.v20150730]
        at 
org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:585)[jetty-all-9.2.13.v20150730.jar:9.2.13.v20150730]
        at 
org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)[jetty-all-9.2.13.v20150730.jar:9.2.13.v20150730]
        at 
org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:553)[jetty-all-9.2.13.v20150730.jar:9.2.13.v20150730]
        at 
org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:223)[jetty-all-9.2.13.v20150730.jar:9.2.13.v20150730]
        at 
org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1127)[jetty-all-9.2.13.v20150730.jar:9.2.13.v20150730]
        at 
org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:515)[jetty-all-9.2.13.v20150730.jar:9.2.13.v20150730]
        at 
org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:185)[jetty-all-9.2.13.v20150730.jar:9.2.13.v20150730]
        at 
org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1061)[jetty-all-9.2.13.v20150730.jar:9.2.13.v20150730]
        at 
org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)[jetty-all-9.2.13.v20150730.jar:9.2.13.v20150730]
        at 
org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:110)[jetty-all-9.2.13.v20150730.jar:9.2.13.v20150730]
        at 
org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:553)[jetty-all-9.2.13.v20150730.jar:9.2.13.v20150730]
        at 
org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:110)[jetty-all-9.2.13.v20150730.jar:9.2.13.v20150730]
        at 
org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97)[jetty-all-9.2.13.v20150730.jar:9.2.13.v20150730]
        at 
org.eclipse.jetty.server.Server.handle(Server.java:499)[jetty-all-9.2.13.v20150730.jar:9.2.13.v20150730]
        at 
org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:310)[jetty-all-9.2.13.v20150730.jar:9.2.13.v20150730]
        at 
org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:257)[jetty-all-9.2.13.v20150730.jar:9.2.13.v20150730]
        at 
org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java:540)[jetty-all-9.2.13.v20150730.jar:9.2.13.v20150730]
        at 
org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:635)[jetty-all-9.2.13.v20150730.jar:9.2.13.v20150730]
        at 
org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:555)[jetty-all-9.2.13.v20150730.jar:9.2.13.v20150730]
        at java.lang.Thread.run(Thread.java:745)[:1.8.0_66]

2016-10-21 14:05:01,241 | WARN  | /admin/xml/topics.jsp | 
org.eclipse.jetty.server.HttpChannel | qtp106297322-46
javax.servlet.ServletException: javax.servlet.ServletException: 
org.apache.jasper.JasperException: An exception occurred processing JSP page 
/xml/topics.jsp at line 20

17: --%>
18: <topics>
19: <c:forEach items="${requestContext.brokerQuery.topics}" var="row">
20: <topic name="<c:out value="${row.name}"/> ">
21:
22:   <stats size="${row.queueSize}"
23:          consumerCount="${row.consumerCount}"


Stacktrace:
        at 
org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:130)[jetty-all-9.2.13.v20150730.jar:9.2.13.v20150730]
        at 
org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97)[jetty-all-9.2.13.v20150730.jar:9.2.13.v20150730]
        at 
org.eclipse.jetty.server.Server.handle(Server.java:499)[jetty-all-9.2.13.v20150730.jar:9.2.13.v20150730]
        at 
org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:310)[jetty-all-9.2.13.v20150730.jar:9.2.13.v20150730]
        at 
org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:257)[jetty-all-9.2.13.v20150730.jar:9.2.13.v20150730]
        at 
org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java:540)[jetty-all-9.2.13.v20150730.jar:9.2.13.v20150730]
        at 
org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:635)[jetty-all-9.2.13.v20150730.jar:9.2.13.v20150730]
        at 
org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:555)[jetty-all-9.2.13.v20150730.jar:9.2.13.v20150730]
        at java.lang.Thread.run(Thread.java:745)[:1.8.0_66]
2016-10-21 14:05:01,244 | WARN  | Could not send response error 500: 
javax.servlet.ServletException: javax.servlet.ServletException: 
org.apache.jasper.JasperException: An exception occurred processing JSP page 
/xml/topics.jsp at line 20

17: --%>
18: <topics>
19: <c:forEach items="${requestContext.brokerQuery.topics}" var="row">
20: <topic name="<c:out value="${row.name}"/> ">
21:
22:   <stats size="${row.queueSize}"
23:          consumerCount="${row.consumerCount}"

{quote}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to