我正在寻找与KahaDB相关的以下问题的答案。
我有一个使用ActiveMQ的应用程序,该应用程序收到大约500,000到100万条消息,这些消息被写入ActiveMQ队列,消费者会将它们捡起来。
我发现db.data文件大小在几KB到几乎600或700 MB之间变化。
我注意到当db.data文件大小增加时,消息卡住,迫使我关闭我的应用程序,重新启动应用程序让新的消费者连接到代理以排空所有消息。
理想情况下,db.data的大小应该是多少?如果一个应用程序同时生成和使用,无论消息的数量如何,我认为db.data的大小应该很小。
为什么有时文件大小会增加,什么会触发db.data的文件大小增长?
我有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>
答案 0 :(得分:0)
通常,kahadb目录包含尚未消费的消息段。如果细分中的任何消息尚未消费,则会保留整个细分。因此,如果您在任何队列中都没有任何内容,那么您通常不会在kaha目录中获得任何内容。
如果启用了jetty控制台,则可以使用它来查看哪些队列中包含消息。
如果您有时会慢慢消耗一些队列,您可能希望将段大小从默认值(例如33 meg)调整到更小的值以避免填满磁盘/从配置文件中达到存储限制)