java - KahaDB db.data 和 ActiveMQ 5.6

标签 java activemq

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

我有一个使用 ActiveMQ 的应用程序,该应用程序接收大约 500,000 到 100 万条消息,这些消息被写入 ActiveMQ 队列并由消费者接收。

我观察到 db.data 文件大小在几 KB 到近 600 或 700 MB 之间变化。

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

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

  2. 为什么有时文件大小会变大,是什么触发了 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>

最佳答案

通常,kahadb 目录包含尚未使用的消息段。如果段中有任何消息还没有被消费,它会保留整个段。所以如果你在任何队列中什么都没有,你通常不会在 kaha 目录中有太多的东西。

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

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

关于java - KahaDB db.data 和 ActiveMQ 5.6,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22547136/

相关文章:

java - 在 Hibernate/JSF 应用程序中从 MySQL 数据库中检索 Blob

java - JOptionPane showInputDialog null?

c++ - ActiveMQ C++ 同步客户端

java - 当其他消费者正在处理消息时,ActiveMQ onmessage 被阻塞

java - 如何找到使用 FileOutputStream 创建的文件的路径

Java 和 R 桥梁

java - 比特币矿池挖矿的地层连接

spring-boot - Camel 从 activemq 路由到 rest 端点

java - 在运行时启动 jms 消息驱动的 channel 适配器

Python Proton 将二进制数据发送到 Active MQ