Actually, your config *could* cause a problem.
If you have>100MB of messages in memory and you try to write them to temp
storage (let's say on a Topic) then you might have problems since temp
store is only 100MB (1/2 of what memory is).


On Wed, Dec 5, 2012 at 6:35 AM, Christian Posta
<christian.po...@gmail.com>wrote:

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


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

Reply via email to