You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@activemq.apache.org by "Gary Tully (JIRA)" <ji...@apache.org> on 2010/04/01 11:33:08 UTC

[jira] Commented: (AMQ-2680) Producer Flow Control seems to be broken

    [ https://issues.apache.org/activemq/browse/AMQ-2680?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=58603#action_58603 ] 

Gary Tully commented on AMQ-2680:
---------------------------------

The problem is the configured maxFileLength, it is too large for cleanup. The ampPeristenceAdapter will not delete the first or current journal data file during store cleanup, so in order for some space to be reclaimed on a cleanup there must be at least 3 data files in the journal. For a 40mb store limit 3 15MB files does the trick. This allows cleanup to have an effect. Your scenario works as expected with the following configuration:{code}
<persistenceAdapter>
<amqPersistenceAdapter directory="${activemq.base}/data/amq" maxFileLength="15mb"
persistentIndex="true" indexBinSize="32768" indexPageSize="32768" />
</persistenceAdapter>{code}

Btw: for faster recovery of large stores and for more linear enqueue rates, the kahaDB store will give better results. Similar config is needed w.r.t to store data file size.

> Producer Flow Control seems to be broken
> ----------------------------------------
>
>                 Key: AMQ-2680
>                 URL: https://issues.apache.org/activemq/browse/AMQ-2680
>             Project: ActiveMQ
>          Issue Type: Bug
>          Components: Broker, Documentation
>    Affects Versions: 5.3.1
>         Environment: SLES 11, IBM JDK 1.6
>            Reporter: Marc Schöchlin
>            Assignee: Gary Tully
>            Priority: Critical
>         Attachments: activemq.xml
>
>
> How to reproduce:
> - Download ActiveMQ 5.3.1
> - Start broker with the attached configuration
>    ---
>    <systemUsage>
>        <systemUsage>
>            <memoryUsage>
>                <memoryUsage limit="10 mb"/>
>            </memoryUsage>
>            <storeUsage>
>                <storeUsage limit="10 mb" name="queue/RemoteQ"/>
>            </storeUsage>
>            <tempUsage>
>                <tempUsage limit="3 gb"/>
>            </tempUsage>
>        </systemUsage>
>    </systemUsage>
>    ---
> - Start example producer/consumer
>    cd examples
>    ant producer -Durl=tcp://127.0.0.1:61616 -Dmax=100000 -Dsubject=queue/RemoteQ -Ddurable=true -DsleepTime=2
>    sleep 600
>    ant consumer -Durl=tcp://127.0.0.1:61616  -Dsubject=queue/RemoteQ -Dmax=100000 -DsleepTime=2
> The problem: 
> When the 10mb limit is reached, the producer is blocked forever.
> The expected behavior is, that if a consumer cleans the queue, producers are able to post more messages.
> Neither cleaning up the queue, restarting producers and restarting the broker helps :-(
> It would be also a good idea to enhance the documentation about producer-flow-control:
> (http://activemq.apache.org/producer-flow-control.html)
> - expected behavior
> - what is limited in detail by using system|store|tempUsage 
> The entire configuration :
> ---
> <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">
>     <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
>         <property name="locations">
>             <value>file:${activemq.base}/conf/credentials.properties</value>
>         </property>      
>     </bean>
>     <broker xmlns="http://activemq.apache.org/schema/core" brokerName="localhost" dataDirectory="${activemq.data}/data" >
>         <destinationPolicy>
>             <policyMap>
>               <policyEntries>
>                 <policyEntry topic=">" producerFlowControl="true" memoryLimit="10mb">
>                   <deadLetterStrategy>
>                     <!--
>                       Use the prefix 'DLQ.' for the destination name, and make
>                       the DLQ a queue rather than a topic
>                     -->
>                     <individualDeadLetterStrategy
>                       queuePrefix="DLQ." useQueueForQueueMessages="true" />
>                   </deadLetterStrategy>
>                   <pendingSubscriberPolicy>
>                     <vmCursor />
>                   </pendingSubscriberPolicy>
>                 </policyEntry>
>                 <policyEntry queue=">" producerFlowControl="true" memoryLimit="10mb">
>                   <!-- Use VM cursor for better latency
>                        For more information, see:
>                        
>                        http://activemq.apache.org/message-cursors.html
>                        
>                   <pendingQueuePolicy>
>                     <vmQueueCursor/>
>                   </pendingQueuePolicy>
>                   -->
>                   <deadLetterStrategy>
>                     <!--
>                       Use the prefix 'DLQ.' for the destination name, and make
>                       the DLQ a queue rather than a topic
>                     -->
>                     <individualDeadLetterStrategy
>                       queuePrefix="DLQ." useQueueForQueueMessages="true" />
>                   </deadLetterStrategy>
>                 </policyEntry>
>               </policyEntries>
>             </policyMap>
>         </destinationPolicy> 
>  
>         <systemUsage>
>             <systemUsage>
>                 <memoryUsage>
>                     <memoryUsage limit="10 mb"/>
>                 </memoryUsage>
>                 <storeUsage>
>                     <storeUsage limit="10 mb" name="queue/RemoteQ"/>
>                 </storeUsage>
>                 <tempUsage>
>                     <tempUsage limit="3 gb"/>
>                 </tempUsage>
>             </systemUsage>
>         </systemUsage>
>                   
>         <transportConnectors>
>             <transportConnector name="openwire" uri="tcp://0.0.0.0:61616"/>
>         </transportConnectors>
>     </broker>
>     <import resource="jetty.xml"/>
>     
> </beans>
> ---

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.