Hello,

after several days of testing, i am facing the following issue : I am unable
to limit the physical space of temp storage used by AMQ, and temp_store is
growing ever and ever...

===========================
= Scenario :
===========================
- One JVM, handling several producers, spamming the broker.
- One JVM, embedding the broker, with several consumers.
- All message are as DeliveryMode.NON_PERSISTENT

===========================
= Configuration (resumed)
===========================
- AMQ.maxFileLength=67108864
- <memoryUsage limit="128mb"/>
- <storeUsage limit="88mb" store="#store" />
- <tempUsage limit="160mb"/>
- <policyEntry queue=">" producerFlowControl="false" memoryLimit="64mb"/>

This should means, based on my understanding :
- The temp store is limited to 88mb
- Each temp file is 64 mb, so i should have 1 (or 2) temp files maximum

1) ISSUE1 : After flooding the broker, i have massive files into temp
directory, enforcing activemq configuration...
I have followed several post recommandations, including
"http://open-source-adventures.blogspot.com/2009/01/limiting-disk-store-usage-with-active.html";,
without any success.

2) ISSUE2 : The maxFileLegth has no effect, since i have massive flood of 32
MB "data-TopicSubscription-XXX" files inside "tmp_storage" folder.

Someone may have a solution here (i hope...). Thanks by advance!
Regards.

===========================
= JMX on start
===========================
- Broker.Memory = 134217728
- Broker.StoreLimit = 92274688
- Broker.TempLimit = 167772160
- Queue.MemoryLimit = 67108864

===========================
= JMX while running
===========================
- Broker.MemoryPercentUsage = 320 (???)
- Broker.StorePercentUsage = 0 (logic, i am not using persistent senders)
- Broker.TempPercentUsage = 0 (not logic : i have plenty of temp store
files)
- Queue.MemoryPercentUsage = 0 (???)
- Queue.CursorMemoryUsage=435215400
- Queue.CursorPercentUser=324 (???)

===========================
= ActiveMQ full 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   
  http://camel.apache.org/schema/spring
http://camel.apache.org/schema/spring/camel-spring.xsd";>
        
        <!-- Allows us to use system properties as variables in this 
configuration
file -->
        <bean
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
                <property name="locations">             
<value>file:C:\xxx\Experimental\maven.1236678842549\src\test\resources\jms2\activemq.properties</value>
                </property>
        </bean>
        
        <!-- The store, declared as bean due to
http://issues.apache.org/activemq/browse/AMQ-2064 -->
        <bean id="store"
class="org.apache.activemq.store.amq.AMQPersistenceAdapter">
                <!-- Data directory -->
                <property name="directory" value="${activemq.base}/data"/>
                <!-- 64 mb -->
                <property name="maxFileLength" value="67108864"/>
                <!-- References to files -->
                <property name="persistentIndex" value="true"/>         
        </bean>
 
        
        <!-- The broker -->
        <broker xmlns="http://activemq.apache.org/schema/core"; persistent="true"
advisorySupport="false" useJmx="true" brokerName="LCH.TEST"
monitorConnectionSplits="false"
splitSystemUsageForProducersConsumers="false" start="false"
persistenceAdapter="#store">
                
                <!-- Destination specific policies using destination names or 
wildcards
-->
                <destinationPolicy>
                        <policyMap>
                                <policyEntries>
                                        <!-- *** producerFlowControl=false -->
                                        <!-- When this is added, all your 
queues will start persisting their
messages to the disk. -->
                                        <!-- Freeing your RAM to consume more 
messages w/o any slowdowns. -->
                                        <!-- *** memoryLimit : Per queue memory 
limit -->
                                        <policyEntry queue=">" 
producerFlowControl="false" memoryLimit="64mb"/>
                                </policyEntries>
                        </policyMap>
                </destinationPolicy>
                
                <!-- The transport connectors ActiveMQ will listen to -->
                <transportConnectors>
                        <transportConnector name="LCH" 
uri="nio://MIYOPC65:61616"/>
                </transportConnectors>
                
                <!-- Use the following to configure how ActiveMQ is exposed in 
JMX -->
                <managementContext>
                        <managementContext createConnector="true"/>
                </managementContext>                    
                
                <!-- The maximum about of space the broker will use before 
slowing down
producers -->
                <!-- sendFailIfNoSpace : If no more is available, send client a 
JMS
exception -->
                <systemUsage>
                        <systemUsage sendFailIfNoSpace="true">
                                <!-- Memory usage max -->
                                <memoryUsage>
                                        <!-- Sets the memory limit in bytes 
(broker global). Setting the limit
in bytes will set the usagePortion to 0  -->
                                        <memoryUsage limit="128mb"/>
                                </memoryUsage>
                                
                                <!-- Storage is used for those messages that 
have been sent PERSISTENT
-->
                                <storeUsage>
                                        <!-- Sets the memory limit in bytes 
(broker global). Setting the limit
in bytes will set the usagePortion to 0  -->
                                        <storeUsage limit="88mb" store="#store" 
/>
                                </storeUsage>
                                
                                <!-- Temporary storage is used for spooling out 
messages that have been
sent NON_PERSISTENT -->
                                <tempUsage>
                                        <!-- Sets the memory limit in bytes 
(broker global). Setting the limit
in bytes will set the usagePortion to 0  -->
                                        <tempUsage limit="160mb"/>
                                </tempUsage>
                        </systemUsage>
                </systemUsage>
        </broker>
        
        <!--
        ** Lets configure some Camel endpoints
        **
        ** http://activemq.apache.org/camel/components.html
        -->
        
        <!-- configure the camel activemq component to use the current broker 
-->
        <bean id="activemq"
class="org.apache.activemq.camel.component.ActiveMQComponent">
                <property name="connectionFactory">
                        <bean 
class="org.apache.activemq.ActiveMQConnectionFactory">
                                <property name="brokerURL"
value="vm://localhost?create=false&amp;waitForStart=10000"/>
                                <property name="userName" 
value="${activemq.username}"/>
                                <property name="password" 
value="${activemq.password}"/>
                        </bean>
                </property>
        </bean>
</beans>

-- 
View this message in context: 
http://www.nabble.com/ActiveMQ---Unable-to-limit-temp-store-tp24309792p24309792.html
Sent from the ActiveMQ - User mailing list archive at Nabble.com.

Reply via email to