Search code examples
javaapachetcpactivemq-classic

Apache ActiveMQ Temporary Store limit warning?


I have been facing this below WARN in active.log file very often . Don't understand what exactly every warning means . Can some please help me to understand this and how to fix

1, 2017-06-07 11:11:12,051 | WARN | Temporary Store limit is 51200 mb (current store usage is 0 mb). The data directory: /local/apps/apache-activemq-5.14.3/data only has 5924 mb of usable space. - resetting to maximum available disk space: 5924 mb | org.apache.activemq.broker.BrokerService | main

2, 2017-06-07 11:36:02,358 | WARN | Transport Connection to: tcp://10.235.454.23:59053 failed: java.io.EOFException | org.apache.activemq.broker.TransportConnection.Transport | ActiveMQ Transport: tcp:///10.123.343.345:59053@61616 2017-06-07 11:37:58,441 | WARN | Transport Connection to: tcp://10.123.345.768:46840 failed: java.io.EOFException | org.apache.activemq.broker.TransportConnection.Transport | ActiveMQ Transport: tcp:///10.240.123.234:46840@61616

3, 2017-06-07 11:41:54,376 | WARN | persistent="false", ignoring configured persistenceAdapter: KahaDBPersistenceAdapter[/local/apps/apache-activemq-5.14.3/data/kahadb] | org.apache.activemq.broker.BrokerService | main


Solution

  • To resolve this error/warning you should limit the broker's temporary store limit to a value that is available on disk. This value is set in the broker's system usage configuration by the tempUsage limit in apache-activemq-5.9.0-bin\apache-activemq-5.9.0\conf\activemq.xml:

    <systemUsage>
       <systemUsage>
          <memoryUsage>
              <memoryUsage limit="64 mb"/>
          </memoryUsage>
          <storeUsage>
             <storeUsage limit="100 gb"/>
          </storeUsage>
          <tempUsage>
             <tempUsage limit="50 gb"/>
          </tempUsage>
       </systemUsage>
    </systemUsage>
    

    While the broker may perform ok at first with this condition it has the potential to lead to unexpected results such IOExceptions rather than triggering Producer Flow Control when the resources are exhausted. It is recommend to fix this situation by adjusting the usages limits appropriately.

    Root Cause

    The broker has requested to allocate more disk resources than what is available. Please check you disk space memory where activemq is located before setting up the tempusage memory .

    ActiveMQ provides mechanism to tune memory usage per destination

    <policyEntry queue=">" producerFlowControl="false" memoryLimit="256mb">
    

    I have used wild card character in queue name [> is used to recursively match any destination starting from this name] in the above configuration it is for any queues Anyways for each destnation you can use

    Per-destination—to set a memory limit on a destination, For example, to limit the amount of memory on the FOO.BAR.TEST queue to 10 MB, define a policy entry like the following:

    <destinationPolicy>
        <policyMap>
            <policyEntries>
                <policyEntry topic="FOO.BAR.TEST" memoryLimit="5MB" />
            </policyEntries>
        </policyMap>
    </destinationPolicy>