ActiveMQ: медленное расширение дискового пространства KahaDB и LevelDB
Кто-нибудь наблюдал растущее дисковое пространство в своих хранилищах ActiveMQ KahaDB или LevelDB?
Мы используем следующее:
- Windows Server 2008 SP1 (для развертывания) и Windows 7 SP1 (для разработки)
- Java 1.7
- ActiveMQ 5.11.1 и 5.13.2 (пробовал как KahaDB, так и LevelDB)
- ServiceMix 5.4.0 с сервером Karaf, на котором размещены компоненты Java-приложений на базе Camel, и сервером ActiveMQ, который не используется
- Частота сообщений = 200 сообщений XML в секунду, приходящих и примерно одинаковых (переводимых в JSON компонентами Java-приложений)
- Количество очередей = около 50 очередей, через которые передаются вышеуказанные сообщения; В частности, 2 очереди обрабатывают до половины трафика
- Все сообщения установлены в:
- постоянство доставки = ложь
- время жизни (TTL) = 1 или 2 минуты (максимум)
KahaDB
Когда я использовал ActiveMQ с KahaDB, я наблюдал за файлами db*.log, которые изначально были "скачкообразными" с db-1.log до db-2.log, затем до db-3.log и т. Д. Со старым db*.log файлы очищаются (удаляются), как и ожидалось. Затем, в какой-то момент, может быть через 10 часов, старые файлы db*.log перестают очищаться; появляются новые файлы db*.log, и KahaDB начинает расширяться примерно до 4 ГБ в день. И когда он в конечном итоге достигает установленной нами 50 ГБ, сервер, конечно, перестает работать.
Кажется, что сообщения небольших меньшинств не имеют срока действия (несмотря на получение TTL) и, таким образом, блокируют нормальную очистку. Я пытался вручную удалить старые файлы db*.log, но мне запрещено делать это с предупреждением о том, что эти файлы все еще используются.
Файлы KahaDB db*.log "получитаемы" (!) В текстовом редакторе; то есть я могу распознавать сообщения приложений, но это не говорит мне много о том, что действительно произошло.
LevelDB
Я недавно пытался использовать LevelDB с ActiveMQ 5.13.2, и кажется, что хранилище продолжает расширяться, хотя и гораздо медленнее (около 200 МБ в день).
Я считаю, что хранилище данных LevelDB использует сжатие; большинство файлов выглядят двоичными и, таким образом, довольно непрозрачными без подходящего устройства чтения / просмотра.
Кто-нибудь нашел или реализовал инструмент для чтения / просмотра непостоянных сообщений хранилища сообщений KahaDB или LevelDB?
Наша Конфигурация
Вот как выглядит наш activemq.xml:
<beans
xmlns="http://www.springframework.org/schema/beans"
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.xsd
http://activemq.apache.org/schema/core http://activemq.apache.org/schema/core/activemq-core.xsd">
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<value>file:${activemq.conf}/credentials.properties</value>
</property>
</bean>
<bean id="logQuery" class="io.fabric8.insight.log.log4j.Log4jLogQuery"
lazy-init="false" scope="singleton"
init-method="start" destroy-method="stop">
</bean>
<broker xmlns="http://activemq.apache.org/schema/core" brokerName="XXXX" dataDirectory="${activemq.data}">
<destinationPolicy>
<policyMap>
<policyEntries>
<policyEntry topic=">" >
<pendingMessageLimitStrategy>
<constantPendingMessageLimitStrategy limit="1000"/>
</pendingMessageLimitStrategy>
</policyEntry>
<policyEntry queue=">" producerFlowControl="true" memoryLimit="1mb">
<deadLetterStrategy>
<discarding />
</deadLetterStrategy>
</policyEntry>
</policyEntries>
</policyMap>
</destinationPolicy>
<!--
<managementContext>
<managementContext createConnector="false"/>
</managementContext>
-->
<managementContext>
<managementContext createConnector="true" connectorPort="1099"/>
</managementContext>
<!--
<persistenceAdapter>
<kahaDB directory="${activemq.data}/kahadb"/>
</persistenceAdapter>
-->
<persistenceAdapter>
<levelDB directory="${activemq.data}/leveldb"/>
</persistenceAdapter>
<systemUsage>
<systemUsage>
<memoryUsage>
<memoryUsage percentOfJvmHeap="70" />
</memoryUsage>
<storeUsage>
<storeUsage limit="100 gb"/>
</storeUsage>
<tempUsage>
<tempUsage limit="50 gb"/>
</tempUsage>
</systemUsage>
</systemUsage>
<networkConnectors>
<networkConnector
uri="XXX"
networkTTL="XXX"
duplex="XXX"
prefetchSize="XXX"
userName="${networkconnector.username}"
password="${networkconnector.password}"
name="XXX" >
<excludedDestinations>
</excludedDestinations>
<staticallyIncludedDestinations>
<queue physicalName="XXX" />
<queue physicalName="XXX" />
</staticallyIncludedDestinations>
</networkConnector>
</networkConnectors>
<transportConnectors>
<transportConnector name="amqp" uri="amqp://0.0.0.0:XXXX?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
<transportConnector name="openwire" uri="tcp://0.0.0.0:XXXX?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
<transportConnector name="openwire-outbound" uri="tcp://0.0.0.0:XXXX?maximumConnections=1000&wireformat.maxFrameSize=104857600"/>
</transportConnectors>
<plugins>
<simpleAuthenticationPlugin>
<users>
<authenticationUser username="XXX" password="XXX" groups="XXX" />
</users>
</simpleAuthenticationPlugin>
<authorizationPlugin>
<map>
<authorizationMap>
<authorizationEntries>
<authorizationEntry topic=">" read="XXX" write="XXX" admin="XXX" />
<authorizationEntry queue=">" read="XXX" write="XXX" admin="XXX" />
<authorizationEntry queue="XXX" read="XXX" write="XXX" admin="XXX" />
<authorizationEntry queue="ActiveMQ.Advisory.>" read="XXX" write="XXX" admin="XXX" />
<authorizationEntry topic="ActiveMQ.Advisory.>" read="XXX" write="XXX" admin="XXX" />
</authorizationEntries>
<tempDestinationAuthorizationEntry>
<tempDestinationAuthorizationEntry read="tempDestinationAdmins" write="tempDestinationAdmins" admin="tempDestinationAdmins" />
</tempDestinationAuthorizationEntry>
</authorizationMap>
</map>
</authorizationPlugin>
<runtimeConfigurationPlugin checkPeriod="1000" />
</plugins>
<shutdownHooks>
<bean xmlns="http://www.springframework.org/schema/beans" class="org.apache.activemq.hooks.SpringContextHook" />
</shutdownHooks>
</broker>
<import resource="jetty.xml"/>
</beans>