Apache ActiveMQ临时存储限制警告?

时间:2017-06-07 13:01:17

标签: java apache tcp activemq

我经常在active.log文件中面对下面的WARN。不明白每个警告的含义是什么。有些人可以帮我理解这个以及如何解决

  

2017,20-07 06:11:12,051 |警告|临时存储限制为51200 mb   (当前商店使用量为0 mb)。数据目录:   /local/apps/apache-activemq-5.14.3/data只有5924 MB可用   空间。 - 重置为最大可用磁盘空间:5924 mb |   org.apache.activemq.broker.BrokerService |主

     

2,2017-06-07 11:36:02,358 |警告|传输连接到:tcp://10.235.454.23:59053失败:java.io.EOFException |   org.apache.activemq.broker.TransportConnection.Transport | ActiveMQ的   运输:tcp:///10.123.343.345:59053 @ 61616       2017-06-07 11:37:58,441 |警告|传输连接到:tcp://10.123.345.768:46840失败:java.io.EOFException |   org.apache.activemq.broker.TransportConnection.Transport | ActiveMQ的   运输:tcp:///10.240.123.234:46840 @ 61616

     

3,2017-06-07 11:41:54,376 |警告| persistent =“false”,忽略   配置persistenceAdapter:   KahaDBPersistenceAdapter [/local/apps/apache-activemq-5.14.3/data/kahadb]   | org.apache.activemq.broker.BrokerService |主

1 个答案:

答案 0 :(得分:0)

要解决此错误/警告,您应该将代理的临时存储限制限制为磁盘上可用的值。此值在代理的系统使用配置中通过apache-activemq-5.9.0-bin \ apache-activemq-5.9.0 \ conf \ activemq.xml中的tempUsage限制设置:

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

虽然代理可能在这种情况下首先执行ok,但它有可能导致意外的结果,例如IOExceptions,而不是在资源耗尽时触发Producer Flow Control。建议通过适当调整使用限制来解决这种情况。

根本原因

代理已请求分配比可用磁盘资源更多的磁盘资源。 在设置tempusage内存之前,请检查activemq所在的磁盘空间内存。

ActiveMQ提供了调整每个目标的内存使用量的机制

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

我在队列名称中使用了通配符[&gt;用于递归匹配从此名称开始的任何目标]在上述配置中它适用于任何队列 无论如何,你可以使用

每个目标 - 为目标设置内存限制,例如,要将FOO.BAR.TEST队列中的内存量限制为10 MB,请定义如下所示的策略条目:

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