Hi, thanks for the response.

Some questions on these points from the troubleshooting.


   1. *It contains a pending message for a destination or durable topic
   subscription*

This seems a little flawed, if a consumer who I have little control of is
mis-behaving then my ActiveMQ can end up shutting down and unrecoverable.
Is there some way of timing this out or similar?

*2. It contains an ack for a message which is in an in-use data file - the
ack cannot be removed as a recovery would then mark the message for
redelivery*

Same comment as 1.

*3. The journal references a pending transaction*

I'm not using transactions, but are there transactions under the hood?

*4. It is a journal file, and there may be a pending write to it*

Why would this be the case?

I'll see if I can change the logging settings, since the first occurrence
the number of log files does not seem to have been an issue. I have it
configured to keep messages for 7 days so regardless of the above
conditions I would have thought that at that expiry the log would be
cleaned up so we don't end up in such a situation where the system stops
and cannot restart.


On 14 September 2017 at 00:02, Tim Bain <tb...@alumni.duke.edu> wrote:

> Have you run the troubleshooting procedures in
> http://activemq.apache.org/why-do-kahadb-log-files-
> remain-after-cleanup.html?
> What did they indicate?
>
> On Sep 12, 2017 8:27 PM, "Lionel van den Berg" <lion...@gmail.com> wrote:
>
> Hi all,
> ActiveMQ 5.14.4 running on Suse enterprise 11 sp4
>
> I'm having trouble with the log files (like db-1.log) not being cleaned up
> and after about 6 weeks of running ActiveMQ shuts down because there are
> too many files in the directory (I think it was 3000), it cannot be
> restarted we think due to a JVM limitation. We use a mix of topics and
> queues, we can't guarantee that the consumer from the third party won't be
> shutdown for an extended period. We are storing messages for 7 days, or at
> least we think we are, I've copied the config further down. Don't assume I
> know everything that we are doing with all of the config :). I've read
> various posts but I'm not sure still whether there might be a parameter
> that I can set that will trigger the cleanup.
>
> It looks similar to this https://issues.apache.org/jira/browse/AMQ-5695
> but
> the last comment there is that it is resolved in 5.14.3, I'm running 5.14.4
> on the server side at least, client libraries we did not change.
>
> Does anyone have any ideas?
>
>
>
> <!--
>     Licensed to the Apache Software Foundation (ASF) under one or more
>     contributor license agreements.  See the NOTICE file distributed with
>     this work for additional information regarding copyright ownership.
>     The ASF licenses this file to You under the Apache License, Version 2.0
>     (the "License"); you may not use this file except in compliance with
>     the License.  You may obtain a copy of the License at
>
>     http://www.apache.org/licenses/LICENSE-2.0
>
>     Unless required by applicable law or agreed to in writing, software
>     distributed under the License is distributed on an "AS IS" BASIS,
>     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
> implied.
>     See the License for the specific language governing permissions and
>     limitations under the License.
> -->
> <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";>
>
>     <!-- 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>
>
>    <!-- Allows accessing the server log -->
>     <bean id="logQuery" class="io.fabric8.insight.log.log4j.Log4jLogQuery"
>           lazy-init="false" scope="singleton"
>           init-method="start" destroy-method="stop">
>     </bean>
>
>     <!-- The <broker> element is used to configure the ActiveMQ broker. -->
>     <broker xmlns="http://activemq.apache.org/schema/core";
> brokerName="AutomationServerThree" dataDirectory="${activemq.data}">
>
>         <destinationPolicy>
>           <policyMap>
>             <policyEntries>
>               <!-- policy for all topics -->
>               <policyEntry topic=">" producerFlowControl="true"
> useCache="true" expireMessagesPeriod="86400000" alwaysRetroactive="true">
>                 <pendingMessageLimitStrategy>
>                   <constantPendingMessageLimitStrategy limit="1000"/>
>                 </pendingMessageLimitStrategy>
>                 <!-- discard expired messages -->
>                 <deadLetterStrategy>
>                   <sharedDeadLetterStrategy processExpired="false"/>
>                 </deadLetterStrategy>
>               </policyEntry>
>               <!-- policy for all queues -->
>               <policyEntry queue=">" producerFlowControl="true"
> useCache="true" expireMessagesPeriod="86400000">
>                 <pendingMessageLimitStrategy>
>                   <constantPendingMessageLimitStrategy limit="1000"/>
>                 </pendingMessageLimitStrategy>
>                 <!-- discard expired messages -->
>                 <deadLetterStrategy>
>                   <sharedDeadLetterStrategy processExpired="false"/>
>                 </deadLetterStrategy>
>               </policyEntry>
>             </policyEntries>
>           </policyMap>
>         </destinationPolicy>
>
>
>         <!--
>             The managementContext is used to configure how ActiveMQ is
> exposed in
>             JMX. By default, ActiveMQ uses the MBean server that is started
> by
>             the JVM. For more information, see:
>
>             http://activemq.apache.org/jmx.html
>         -->
>         <managementContext>
>           <managementContext createConnector="true"/>
>         </managementContext>
>
>         <!--
>             Configure message persistence for the broker. The default
> persistence
>             mechanism is the KahaDB store (identified by the kahaDB tag).
>             For more information, see:
>
>             http://activemq.apache.org/persistence.html
>         -->
>         <persistenceAdapter>
>           <kahaDB directory="/media/SharedStorage/Binaries/activemq"
>                   indexCacheSize="40000"
>                   checkForCorruptJournalFiles="true">
>             <locker>
>               <shared-native-file-locker lockAcquireSleepInterval="5000"
> />
>             </locker>
>           </kahaDB>
>         </persistenceAdapter>
>
>
>         <!--
>           The systemUsage controls the maximum amount of space the broker
> will
>           use before disabling caching and/or slowing down producers. For
> more information, see:
>           http://activemq.apache.org/producer-flow-control.html
>         -->
>         <systemUsage>
>           <systemUsage>
>             <memoryUsage>
>               <memoryUsage percentOfJvmHeap="70" />
>             </memoryUsage>
>             <storeUsage>
>               <storeUsage limit="100 gb"/>
>             </storeUsage>
>               <tempUsage>
>                 <tempUsage limit="50 gb"/>
>             </tempUsage>
>           </systemUsage>
>         </systemUsage>
>
>         <!--
>             The transport connectors expose ActiveMQ over a given protocol
> to
>             clients and other brokers. For more information, see:
>
>             http://activemq.apache.org/configuring-transports.html
>         -->
>         <transportConnectors>
>           <!-- DOS protection, limit concurrent connections to 1000 and
> frame size to 100MB -->
>           <transportConnector name="openwire" uri="tcp://
> 0.0.0.0:61616?maximumConnections=1000&amp;wireFormat.maxFrameSize=
> 104857600
> "/>
>           <transportConnector name="amqp" uri="amqp://
> 0.0.0.0:5672?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600
> "/>
>           <transportConnector name="stomp" uri="stomp://
> 0.0.0.0:61613?maximumConnections=1000&amp;wireFormat.maxFrameSize=
> 104857600
> "/>
>           <transportConnector name="mqtt" uri="mqtt://
> 0.0.0.0:1883?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600
> "/>
>           <transportConnector name="ws" uri="ws://
> 0.0.0.0:61614?maximumConnections=1000&amp;wireFormat.maxFrameSize=
> 104857600
> "/>
>         </transportConnectors>
>
>         <!-- destroy the spring context on shutdown to stop jetty -->
>         <shutdownHooks>
>           <bean xmlns="http://www.springframework.org/schema/beans";
> class="org.apache.activemq.hooks.SpringContextHook" />
>         </shutdownHooks>
>
>     </broker>
>
>     <!--
>         Enable web consoles, REST and Ajax APIs and demos
>         The web consoles requires by default login, you can disable this in
> the jetty.xml file
>
>         Take a look at ${ACTIVEMQ_HOME}/conf/jetty.xml for more details
>     -->
>     <import resource="jetty.xml"/>
>
> </beans>
>

Reply via email to