ActiveMQ takes longer to start with KahaDb and more than 10000 messages
-----------------------------------------------------------------------

                 Key: AMQ-2891
                 URL: https://issues.apache.org/activemq/browse/AMQ-2891
             Project: ActiveMQ
          Issue Type: Bug
          Components: Broker
    Affects Versions: 5.4.0
         Environment: Windows XP
            Reporter: Dinny Mathew


ActiveMQ takes around five minutes to start with KahaDb with more than 10000 
messages. All messages are persistent queue. 
With 500,000 persistent messsages, ittook around 20 minutes to start.

See the five minutes time difference between lines:

2010-08-31 12:55:19,286 | INFO | 
PListStore:C:\ActiveMQ\apache-activemq-5.4.0\bin\win32\..\..\data\localhost\tmp_storage
 initialized | org.apache.activemq.store.kahadb.plist.PListStore | 
WrapperSimpleAppMain
2010-08-31 13:03:56,983 | INFO | Listening for connections at: 
nio://S90356004630988:61616 | 
org.apache.activemq.transport.TransportServerThreadSupport | 
WrapperSimpleAppMain

>From activemq.log with 100,000 messages

2010-08-31 12:55:10,436 | INFO | JMX consoles can connect to 
service:jmx:rmi:///jndi/rmi://localhost:1099/jmxrmi | 
org.apache.activemq.broker.jmx.ManagementContext | JMX connector
2010-08-31 12:55:11,294 | INFO | KahaDB is version 2 | 
org.apache.activemq.store.kahadb.MessageDatabase | WrapperSimpleAppMain
2010-08-31 12:55:11,435 | INFO | Recovering from the journal ... | 
org.apache.activemq.store.kahadb.MessageDatabase | WrapperSimpleAppMain
2010-08-31 12:55:11,435 | INFO | Recovery replayed 1 operations from the 
journal in 0.063 seconds. | org.apache.activemq.store.kahadb.MessageDatabase | 
WrapperSimpleAppMain
2010-08-31 12:55:12,090 | INFO | ActiveMQ 5.4.0 JMS Message Broker (localhost) 
is starting | org.apache.activemq.broker.BrokerService | WrapperSimpleAppMain
2010-08-31 12:55:12,090 | INFO | For help or more information please see: 
http://activemq.apache.org/ | org.apache.activemq.broker.BrokerService | 
WrapperSimpleAppMain
2010-08-31 12:55:12,278 | INFO | Scheduler using directory: 
activemq-data\scheduler | org.apache.activemq.broker.scheduler.SchedulerBroker 
| WrapperSimpleAppMain
2010-08-31 12:55:19,286 | INFO | 
PListStore:C:\ActiveMQ\apache-activemq-5.4.0\bin\win32\..\..\data\localhost\tmp_storage
 initialized | org.apache.activemq.store.kahadb.plist.PListStore | 
WrapperSimpleAppMain
2010-08-31 13:03:56,983 | INFO | Listening for connections at: 
nio://S90356004630988:61616 | 
org.apache.activemq.transport.TransportServerThreadSupport | 
WrapperSimpleAppMain
2010-08-31 13:03:56,999 | INFO | Connector nio Started | 
org.apache.activemq.broker.TransportConnector | WrapperSimpleAppMain
2010-08-31 13:03:57,045 | INFO | ActiveMQ JMS Message Broker (localhost, 
ID:S90356004630988-3777-1283273712137-0:0) started | 
org.apache.activemq.broker.BrokerService | WrapperSimpleAppMain
2010-08-31 13:03:57,639 | INFO | Logging to 
org.slf4j.impl.JCLLoggerAdapter(org.eclipse.jetty.util.log) via 
org.eclipse.jetty.util.log.Slf4jLog | org.eclipse.jetty.util.log | 
WrapperSimpleAppMain
2010-08-31 13:03:57,639 | INFO | jetty-7.0.1.v20091125 | 
org.eclipse.jetty.util.log | WrapperSimpleAppMain
2010-08-31 13:03:58,451 | INFO | ActiveMQ WebConsole initialized. | 
org.apache.activemq.web.WebConsoleStarter | WrapperSimpleAppMain
2010-08-31 13:03:58,857 | INFO | Initializing Spring FrameworkServlet 
'dispatcher' | /admin | WrapperSimpleAppMain
2010-08-31 13:03:59,341 | INFO | ActiveMQ Console at http://0.0.0.0:8161/admin 
| org.eclipse.jetty.util.log | WrapperSimpleAppMain
2010-08-31 13:04:00,091 | INFO | Initializing Spring root WebApplicationContext 
| /camel | WrapperSimpleAppMain
2010-08-31 13:04:02,668 | INFO | Connector vm://localhost Started | 
org.apache.activemq.broker.TransportConnector | WrapperSimpleAppMain
2010-08-31 13:04:04,526 | INFO | Camel Console at http://0.0.0.0:8161/camel | 
org.eclipse.jetty.util.log | WrapperSimpleAppMain
2010-08-31 13:04:04,589 | INFO | ActiveMQ Web Demos at http://0.0.0.0:8161/demo 
| org.eclipse.jetty.util.log | WrapperSimpleAppMain
2010-08-31 13:04:04,651 | INFO | RESTful file access application at 
http://0.0.0.0:8161/fileserver | org.eclipse.jetty.util.log | 
WrapperSimpleAppMain
2010-08-31 13:04:04,698 | INFO | Started [email protected]:8161 | 
org.eclipse.jetty.util.log | WrapperSimpleAppMain
2

With 500,000 messages, AMQ took 20 minutes to start.
2010-08-31 15:24:31,178 | INFO  | JMX consoles can connect to 
service:jmx:rmi:///jndi/rmi://localhost:1099/jmxrmi | 
org.apache.activemq.broker.jmx.ManagementContext | JMX connector
2010-08-31 15:24:31,975 | INFO  | KahaDB is version 2 | 
org.apache.activemq.store.kahadb.MessageDatabase | WrapperSimpleAppMain
2010-08-31 15:24:32,194 | INFO  | Recovering from the journal ... | 
org.apache.activemq.store.kahadb.MessageDatabase | WrapperSimpleAppMain
2010-08-31 15:24:32,194 | INFO  | Recovery replayed 1 operations from the 
journal in 0.047 seconds. | org.apache.activemq.store.kahadb.MessageDatabase | 
WrapperSimpleAppMain
2010-08-31 15:24:35,365 | INFO  | ActiveMQ 5.4.0 JMS Message Broker (localhost) 
is starting | org.apache.activemq.broker.BrokerService | WrapperSimpleAppMain
2010-08-31 15:24:35,365 | INFO  | For help or more information please see: 
http://activemq.apache.org/ | org.apache.activemq.broker.BrokerService | 
WrapperSimpleAppMain
2010-08-31 15:24:35,552 | INFO  | Scheduler using directory: 
activemq-data\scheduler | org.apache.activemq.broker.scheduler.SchedulerBroker 
| WrapperSimpleAppMain
2010-08-31 15:24:48,034 | INFO  | 
PListStore:C:\ActiveMQ\apache-activemq-5.4.0\bin\win32\..\..\data\localhost\tmp_storage
 initialized | org.apache.activemq.store.kahadb.plist.PListStore | 
WrapperSimpleAppMain
2010-08-31 15:45:09,767 | INFO  | Listening for connections at: 
nio://S90356004630988:61616 | 
org.apache.activemq.transport.TransportServerThreadSupport | 
WrapperSimpleAppMain
2010-08-31 15:45:09,767 | INFO  | Connector nio Started | 
org.apache.activemq.broker.TransportConnector | WrapperSimpleAppMain
2010-08-31 15:45:09,876 | INFO  | ActiveMQ JMS Message Broker (localhost, 
ID:S90356004630988-3029-1283282675427-0:0) started | 
org.apache.activemq.broker.BrokerService | WrapperSimpleAppMain
2010-08-31 15:45:10,923 | INFO  | Logging to 
org.slf4j.impl.JCLLoggerAdapter(org.eclipse.jetty.util.log) via 
org.eclipse.jetty.util.log.Slf4jLog | org.eclipse.jetty.util.log | 
WrapperSimpleAppMain
2010-08-31 15:45:10,923 | INFO  | jetty-7.0.1.v20091125 | 
org.eclipse.jetty.util.log | WrapperSimpleAppMain
2010-08-31 15:45:10,970 | INFO  | Slow KahaDB access: cleanup took 1047 | 
org.apache.activemq.store.kahadb.MessageDatabase | ActiveMQ Journal Checkpoint 
Worker
2010-08-31 15:45:11,829 | INFO  | ActiveMQ WebConsole initialized. | 
org.apache.activemq.web.WebConsoleStarter | WrapperSimpleAppMain
2010-08-31 15:45:12,235 | INFO  | Initializing Spring FrameworkServlet 
'dispatcher' | /admin | WrapperSimpleAppMain
2010-08-31 15:45:12,719 | INFO  | ActiveMQ Console at http://0.0.0.0:8161/admin 
| org.eclipse.jetty.util.log | WrapperSimpleAppMain
2010-08-31 15:45:13,422 | INFO  | Initializing Spring root 
WebApplicationContext | /camel | WrapperSimpleAppMain
2010-08-31 15:45:16,390 | INFO  | Connector vm://localhost Started | 
org.apache.activemq.broker.TransportConnector | WrapperSimpleAppMain
2010-08-31 15:45:18,468 | INFO  | Camel Console at http://0.0.0.0:8161/camel | 
org.eclipse.jetty.util.log | WrapperSimpleAppMain
2010-08-31 15:45:18,561 | INFO  | ActiveMQ Web Demos at 
http://0.0.0.0:8161/demo | org.eclipse.jetty.util.log | WrapperSimpleAppMain
2010-08-31 15:45:18,624 | INFO  | RESTful file access application at 
http://0.0.0.0:8161/fileserver | org.eclipse.jetty.util.log | 
WrapperSimpleAppMain
2010-08-31 15:45:18,686 | INFO  | Started [email protected]:8161 | 
org.eclipse.jetty.util.log | WrapperSimpleAppMain

Here is the config:

    <broker xmlns="http://activemq.apache.org/schema/core"; 
brokerName="localhost" dataDirectory="${activemq.base}/data" persistent="true" 
systemExitOnShutdown="true" useShutdownHook="false" advisorySupport="false" 
useJmx="true">
 
        <!--
                        For better performances use VM cursor and small memory 
limit.
                        For more information, see:
            
            http://activemq.apache.org/message-cursors.html
            
            Also, if your producer is "hanging", it's probably due to producer 
flow control.
            For more information, see:
            http://activemq.apache.org/producer-flow-control.html
        -->
              
        <destinationPolicy>
            <policyMap>
              <policyEntries>
                <policyEntry topic=">" producerFlowControl="false" 
optimizedDispatch="true" memoryLimit="128mb">
                  <pendingSubscriberPolicy>
                    <fileCursor />
                  </pendingSubscriberPolicy>
                </policyEntry>
                <policyEntry queue=">" producerFlowControl="false" 
optimizedDispatch="true" memoryLimit="128mb">
                  <!-- Use VM cursor for better latency
                       For more information, see:
                       
                       http://activemq.apache.org/message-cursors.html
                   -->    
                  <pendingQueuePolicy>
                    <fileQueueCursor/>
                  </pendingQueuePolicy>
                  
                </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="${activemq.base}/data/kahadb" 
enableIndexWriteAsync="true" journalMaxFileLength="64mb"  
indexWriteBatchSize="10000" indexCacheSize="10000"/>
        </persistenceAdapter>
        
        
          <!--
            The systemUsage controls the maximum amount of space the broker 
will 
            use before slowing down producers. For more information, see:
            
            http://activemq.apache.org/producer-flow-control.html
             
        <systemUsage>
            <systemUsage>
                <memoryUsage>
                    <memoryUsage limit="600 mb"/>
                </memoryUsage>
                <storeUsage>
                    <storeUsage limit="10 gb"/>
                </storeUsage>
                <tempUsage>
                    <tempUsage limit="1 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>
            <transportConnector name="nio" uri="nio://0.0.0.0:61616"/>
        </transportConnectors>


    </broker>



-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to