我正在寻找与KahaDB相关的以下问题的答案。
我有一个使用ActiveMQ的应用程序,该应用程序接收大约50万到100万条消息,这些消息被写入到ActiveMQ队列中,消费者会将它们捡起来。
我观察到,db.data文件大小变化在几KB到近600或700 MB之间。
我注意到,当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>发布于 2014-05-14 00:34:53
通常,kahadb目录中有尚未使用的消息段。如果段中有任何尚未被消耗的消息,它将保留整个段。因此,如果在任何队列中没有任何内容,通常在kaha目录中就不会有太多内容。
如果启用了jetty控制台,则可以使用它查看哪些队列中有消息。
如果有时某些队列消耗得很慢,您可能希望将段大小从默认的(大约33 meg)调整为更小的大小,以避免填充磁盘/从配置文件中触及存储限制)。
https://stackoverflow.com/questions/22547136
复制相似问题