activemq-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Tomáš Martinec <tomas.marti...@d3s.mff.cuni.cz>
Subject Activemq 5.4.2 hangs when the temp disk usage is used
Date Tue, 04 Dec 2012 21:01:29 GMT
Hello,

I am trying to setup activemq 5.4.2 and I experience hangs when the 
broker fills its heap and starts using storage. In my scenario I have 
one message producer and one message consumer connected. The producer is 
blocked and the consumer does not receive any messages. I have been able 
to run the broker under debug mode and identify what the relevant 
threads are doing:

The task for iteration of the queue waits for the messagesLock on the 
line 1404 in 
http://svn.apache.org/viewvc/activemq/tags/activemq-5.4.2/activemq-core/src/main/java/org/apache/activemq/broker/region/Queue.java?view=markup.



The thread that stores messages into the queue waits on the line 219 of 
http://svn.apache.org/viewvc/activemq/tags/activemq-5.4.2/activemq-core/src/main/java/org/apache/activemq/broker/region/cursors/FilePendingMessageCursor.java?view=markup

for free space. Note that the thread has the messagesLock locked and the 
temporaly usage is always 103%, and therefore, it never returns.

Is it possible that I encountered something like a deadlock? Perhaps, I 
messed up something in the configuration.

I will be thankful for advice.
Tomas

Here is the configuration of the broker:

<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">

     <!-- Allows us to use system properties as variables in this 
configuration file -->
     <bean 
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer" 
/>

     <!--
         The <broker> element is used to configure the ActiveMQ broker.

         advisories incurr a hit with every add 
connection|destination|producer|consumer
           - client side:  providerUrl = 
tcp://localhost:61616?jms.watchTopicAdvisories=false
         statistics have a small impact on concurrency so disable
         schedualer has a small impact as it checks for the presence 
three properties on each message
         jmx adds a bunch of wrapper classes

         ACTIVEMQ_OPTS_MEMORY="-Xmx11g -Xms6g 
-Dorg.apache.activemq.UseDedicatedTaskRunner=false 
-Djava.util.logging.config.file=logging.properties -XX:+UseLargePages"
     -->
     <broker xmlns="http://activemq.apache.org/schema/core" 
brokerName="localhost"
         dataDirectory="/dasd/martinec/kahadb-storage/activemq-data"
         destroyApplicationContextOnStop="true"
         deleteAllMessagesOnStartup="true"
         advisorySupport="false"
         enableStatistics="false"
         schedulerSupport="false"
         useJmx="true"
         persistent="true">

         <destinationPolicy>
             <policyMap>
               <policyEntries>
                 <!--
                     producerFlowControll thread unnecessary with no 
memory limits
                     with no failover, no need to suppress duplicates so 
audit can be disabled
                     message expiry thread unnecessary as normal 
dispatch will handle expiry
                 -->
                 <policyEntry topic=">" producerFlowControl="false" 
enableAudit="false" expireMessagesPeriod="0"></policyEntry>
                 <policyEntry queue=">" producerFlowControl="true" 
memoryLimit="50mb" enableAudit="false" expireMessagesPeriod="0">

                 </policyEntry>
               </policyEntries>
             </policyMap>
         </destinationPolicy>

         <!--
             The managementContext is used to configure how ActiveMQ is 
exposed in
             JMX. By default, ActiveMQ uses the MBean server that is 
started by
             the JVM. For more information, see:

             http://activemq.apache.org/jmx.html
         -->
         <managementContext>
             <managementContext createConnector="true" 
connectorPort="1399" rmiServerPort="1399"/>
         </managementContext>

         <persistenceAdapter>
	    <kahaPersistenceAdapter directory="/dasd/martinec/kahadb-storage"/>
         </persistenceAdapter>

	<systemUsage>
	    <systemUsage>
		<memoryUsage>
	            <!-- the only queue has 50 mb, so this should be enough -->
		    <memoryUsage limit="200 mb"/>
		</memoryUsage>
		<storeUsage>
	            <!-- no special reason for this -->
		    <storeUsage limit="1 gb"/>
		</storeUsage>
		<tempUsage>
	            <!-- this MUST be above the journal file size; see
	 
http://tmielke.blogspot.cz/2011/02/observations-on-activemqs-temp-storage.html
	             -->
		    <tempUsage limit="100 mb"/>
		</tempUsage>
	    </systemUsage>
	</systemUsage>

         <!--
             The transport connectors expose ActiveMQ over a given 
protocol to
             clients and other brokers. For more information, see:

             http://activemq.apache.org/configuring-transports.html
         -->
         <transportConnectors>
             <transportConnector name="openwire" uri="tcp://0.0.0.0:61616"/>
         </transportConnectors>
     </broker>

     <import resource="jetty.xml"/>

</beans>

Mime
View raw message