Interesting. Your scenario sounds like PFC is blocking the connection. Not
sure yet why that would happen. Your config looks okay. Do you still have
the thread dumps?

Are the producer/consumer on the same connection? If you have a test case
you can post, please do. Would make it easy to figure what the problem is.


On Tue, Dec 4, 2012 at 2:01 PM, Tomáš Martinec <
tomas.marti...@d3s.mff.cuni.cz> wrote:

> 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<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<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<http://www.springframework.org/schema/beans>
> "
>   
> xmlns:amq="http://activemq.**apache.org/schema/core<http://activemq.apache.org/schema/core>
> "
>   
> xmlns:xsi="http://www.w3.org/**2001/XMLSchema-instance<http://www.w3.org/2001/XMLSchema-instance>
> "
>   
> xsi:schemaLocation="http://**www.springframework.org/**schema/beans<http://www.springframework.org/schema/beans>
> http://www.springframework.**org/schema/beans/spring-beans-**2.0.xsd<http://www.springframework.org/schema/beans/spring-beans-2.0.xsd>
>   
> http://activemq.apache.org/**schema/core<http://activemq.apache.org/schema/core>
> http://activemq.apache.org/**schema/core/activemq-core.xsd<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<http://activemq.apache.org/schema/core>"
> brokerName="localhost"
>         dataDirectory="/dasd/martinec/**kahadb-storage/activemq-data"
>         destroyApplicationContextOnSto**p="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<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<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<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>
>



-- 
*Christian Posta*
http://www.christianposta.com/blog
twitter: @christianposta

Reply via email to