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&waitForStart=10000"/>
<property name="userName" value="${activemq.username}"/>
<property name="password" value="${activemq.password}"/>
</bean>
</property>
</bean>
</beans>