KahaDB db.data和ActiveMQ 5.6

时间:2014-03-20 23:16:08

标签: java activemq

我正在寻找与KahaDB相关的以下问题的答案。

我有一个使用ActiveMQ的应用程序,该应用程序收到大约500,000到100万条消息,这些消息被写入ActiveMQ队列,消费者会将它们捡起来。

我发现db.data文件大小在几KB到几乎600或700 MB之间变化。

我注意到当db.data文件大小增加时,消息卡住,迫使我关闭我的应用程序,重新启动应用程序让新的消费者连接到代理以排空所有消息。

  1. 理想情况下,db.data的大小应该是多少?如果一个应用程序同时生成和使用,无论消息的数量如何,我认为db.data的大小应该很小。

  2. 为什么有时文件大小会增加,什么会触发db.data的文件大小增长?

  3. 我有ActiveMQ 5.6,我每个月至少看到这个问题2到3次。在运行顺畅的代理中,我发现db.data的文件大小是KB,而不是500 MB或700 MB。

    以下是activemq.xml文件示例:

    <?xml version="1.0" encoding="UTF-8"?>
    <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">
       <!-- 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:${activemq.conf}/credentials.properties</value>
          </property>
       </bean>
       <broker xmlns="http://activemq.apache.org/schema/core" brokerName="localhost" dataDirectory="/foo/activemq_5.6/data">
          <destinationPolicy>
             <policyMap>
                <policyEntries>
                   <policyEntry topic=">" producerFlowControl="true" memoryLimit="1mb">
                      <pendingSubscriberPolicy>
                         <vmCursor />
                      </pendingSubscriberPolicy>
                   </policyEntry>
                   <policyEntry queue=">" producerFlowControl="true" memoryLimit="1mb" useCache="false" />
                </policyEntries>
             </policyMap>
          </destinationPolicy>
          <managementContext>
             <managementContext createConnector="true" />
          </managementContext>
          <persistenceAdapter>
             <kahaDB directory="/foo/activemq_5.6/data/kahadb" />
          </persistenceAdapter>
          <systemUsage>
             <systemUsage>
                <memoryUsage>
                   <memoryUsage limit="64 mb" />
                </memoryUsage>
                <storeUsage>
                   <storeUsage limit="100 gb" />
                </storeUsage>
                <tempUsage>
                   <tempUsage limit="50 gb" />
                </tempUsage>
             </systemUsage>
          </systemUsage>
          <transportConnectors>
             <transportConnector name="openwire" uri="tcp://0.0.0.0:61616" />
          </transportConnectors>
       </broker>
       <import resource="jetty.xml" />
    </beans>
    

1 个答案:

答案 0 :(得分:0)

通常,kahadb目录包含尚未消费的消息段。如果细分中的任何消息尚未消费,则会保留整个细分。因此,如果您在任何队列中都没有任何内容,那么您通常不会在kaha目录中获得任何内容。

如果启用了jetty控制台,则可以使用它来查看哪些队列中包含消息。

如果您有时会慢慢消耗一些队列,您可能希望将段大小从默认值(例如33 meg)调整到更小的值以避免填满磁盘/从配置文件中达到存储限制)