R.I.Pienaar created AMQ-3819:
--------------------------------
Summary: high cpu with stomp+nio+ssl and many subscriptions
Key: AMQ-3819
URL: https://issues.apache.org/jira/browse/AMQ-3819
Project: ActiveMQ
Issue Type: Bug
Components: stomp
Affects Versions: 5.6.0
Environment: CentOS 6, RC of 5.6.0
java version "1.6.0_22"
OpenJDK Runtime Environment (IcedTea6 1.10.6) (rhel-1.43.1.10.6.el6_2-x86_64)
OpenJDK 64-Bit Server VM (build 20.0-b11, mixed mode)
Reporter: R.I.Pienaar
Switching an existing workload from a transport:
{quote}
<transportConnector name="verified_stompssl"
uri="stomp+ssl://0.0.0.0:6165?needClientAuth=true"/>
{quote}
to
{quote}
<transportConnector name="verified_stompssl"
uri="stomp+nio+ssl://0.0.0.0:6165?needClientAuth=true"/>
{quote}
showed the CPU profile to go from 1-5% to 300% constantly on a 8 core server
I was able to recreate this using a ruby client @
http://devco.net/rip/amq_560_stomp_nio_ssl_tester.rb
The important combinations are:
* I am connecting to a stomp+nio+ssl port
* I am creating the subscriptions to the 10 queus and topics
If I change either of these variables - like just commenting out the loop that
does those subscriptions - then the CPU load is acceptable.
I analysed the running VM with VisualVM and found that
transport.nio.NIOSSLTransport.serviceRead() is the busy thread.
My activemq.xml is:
{noformat}
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:amq="http://activemq.apache.org/schema/core"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://activemq.apache.org/schema/core
http://activemq.apache.org/schema/core/activemq-core.xsd
http://activemq.apache.org/camel/schema/spring
http://activemq.apache.org/camel/schema/spring/camel-spring.xsd">
<broker xmlns="http://activemq.apache.org/schema/core" brokerName="amq1"
useJmx="true" persistent="true" schedulePeriodForDestinationPurge="60000">
<destinationPolicy>
<policyMap>
<policyEntries>
<policyEntry topic=">" producerFlowControl="false"/>
<policyEntry queue="*.reply.>" gcInactiveDestinations="true"
inactiveTimoutBeforeGC="120000" />
</policyEntries>
</policyMap>
</destinationPolicy>
<managementContext>
<managementContext connectorPort="1099"
jmxDomainName="org.apache.activemq"/>
</managementContext>
<plugins>
<statisticsBrokerPlugin/>
<simpleAuthenticationPlugin>
<users>
<authenticationUser username="test" password="test"
groups="admins,everyone"/>
</users>
</simpleAuthenticationPlugin>
<authorizationPlugin>
<map>
<authorizationMap>
<authorizationEntries>
<authorizationEntry queue=">" write="admins" read="admins"
admin="admins" />
<authorizationEntry topic=">" write="admins" read="admins"
admin="admins" />
</authorizationEntries>
</authorizationMap>
</map>
</authorizationPlugin>
</plugins>
<sslContext>
<sslContext
keyStore="keystore.jks" keyStorePassword="ohshahCu"
trustStore="truststore.jks" trustStorePassword="ohshahCu"
/>
</sslContext>
<systemUsage>
<systemUsage>
<memoryUsage>
<memoryUsage limit="200 mb" />
</memoryUsage>
<storeUsage>
<storeUsage limit="1 gb" />
</storeUsage>
<tempUsage>
<tempUsage limit="1 gb" />
</tempUsage>
</systemUsage>
</systemUsage>
<transportConnectors>
<transportConnector name="openwire" uri="tcp://0.0.0.0:6166"/>
<transportConnector name="stomp+nio" uri="stomp+nio://0.0.0.0:6163"/>
<transportConnector name="stompssl" uri="stomp+ssl://0.0.0.0:6164"/>
<transportConnector name="verified_stompssl"
uri="stomp+nio+ssl://0.0.0.0:6165?needClientAuth=true"/>
</transportConnectors>
</broker>
<import resource="jetty.xml"/>
</beans>
{noformat}
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators:
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira