You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by jo...@apache.org on 2017/03/12 16:08:19 UTC

svn commit: r1008195 [33/46] - in /websites/production/activemq/content/artemis/docs/1.5.4: ./ diagrams/ gitbook/ gitbook/fonts/ gitbook/fonts/fontawesome/ gitbook/gitbook-plugin-fontsettings/ gitbook/gitbook-plugin-highlight/ gitbook/gitbook-plugin-lu...

Added: websites/production/activemq/content/artemis/docs/1.5.4/perf-tuning.html
==============================================================================
--- websites/production/activemq/content/artemis/docs/1.5.4/perf-tuning.html (added)
+++ websites/production/activemq/content/artemis/docs/1.5.4/perf-tuning.html Sun Mar 12 16:08:18 2017
@@ -0,0 +1,1260 @@
+
+<!DOCTYPE HTML>
+<html lang="" >
+    <head>
+        <title>Troubleshooting and Performance Tuning · ActiveMQ Artemis Documentation</title>
+        <meta charset="UTF-8">
+        <meta http-equiv="X-UA-Compatible" content="IE=edge" />
+        <meta content="text/html; charset=utf-8" http-equiv="Content-Type">
+        <meta name="description" content="">
+        <meta name="generator" content="GitBook 3.1.1">
+        
+        
+        
+    
+    <link rel="stylesheet" href="gitbook/style.css">
+
+    
+            
+                
+                <link rel="stylesheet" href="gitbook/gitbook-plugin-highlight/website.css">
+                
+            
+                
+                <link rel="stylesheet" href="gitbook/gitbook-plugin-search/search.css">
+                
+            
+                
+                <link rel="stylesheet" href="gitbook/gitbook-plugin-fontsettings/website.css">
+                
+            
+        
+
+    
+
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+
+        
+    
+    
+    <meta name="HandheldFriendly" content="true"/>
+    <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
+    <meta name="apple-mobile-web-app-capable" content="yes">
+    <meta name="apple-mobile-web-app-status-bar-style" content="black">
+    <link rel="apple-touch-icon-precomposed" sizes="152x152" href="gitbook/images/apple-touch-icon-precomposed-152.png">
+    <link rel="shortcut icon" href="gitbook/images/favicon.ico" type="image/x-icon">
+
+    
+    <link rel="next" href="configuration-index.html" />
+    
+    
+    <link rel="prev" href="unit-testing.html" />
+    
+
+    </head>
+    <body>
+        
+<div class="book">
+    <div class="book-summary">
+        
+            
+<div id="book-search-input" role="search">
+    <input type="text" placeholder="Type to search" />
+</div>
+
+            
+                <nav role="navigation">
+                
+
+
+<ul class="summary">
+    
+    
+
+    
+
+    
+        
+        
+    
+        <li class="chapter " data-level="1.1" data-path="./">
+            
+                <a href="./">
+            
+                    
+                    Introduction
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.2" data-path="notice.html">
+            
+                <a href="notice.html">
+            
+                    
+                    Legal Notice
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.3" data-path="preface.html">
+            
+                <a href="preface.html">
+            
+                    
+                    Preface
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.4" data-path="project-info.html">
+            
+                <a href="project-info.html">
+            
+                    
+                    Project Info
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.5" data-path="messaging-concepts.html">
+            
+                <a href="messaging-concepts.html">
+            
+                    
+                    Messaging Concepts
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6" data-path="architecture.html">
+            
+                <a href="architecture.html">
+            
+                    
+                    Architecture
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.7" data-path="using-server.html">
+            
+                <a href="using-server.html">
+            
+                    
+                    Using the Server
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.8" data-path="using-jms.html">
+            
+                <a href="using-jms.html">
+            
+                    
+                    Using JMS
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.9" data-path="using-core.html">
+            
+                <a href="using-core.html">
+            
+                    
+                    Using Core
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.10" data-path="jms-core-mapping.html">
+            
+                <a href="jms-core-mapping.html">
+            
+                    
+                    Mapping JMS Concepts to the Core API
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.11" data-path="client-classpath.html">
+            
+                <a href="client-classpath.html">
+            
+                    
+                    The Client Classpath
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.12" data-path="examples.html">
+            
+                <a href="examples.html">
+            
+                    
+                    Examples
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.13" data-path="wildcard-routing.html">
+            
+                <a href="wildcard-routing.html">
+            
+                    
+                    Routing Messages With Wild Cards
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.14" data-path="wildcard-syntax.html">
+            
+                <a href="wildcard-syntax.html">
+            
+                    
+                    Understanding the Apache ActiveMQ Artemis Wildcard Syntax
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.15" data-path="filter-expressions.html">
+            
+                <a href="filter-expressions.html">
+            
+                    
+                    Filter Expressions
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.16" data-path="persistence.html">
+            
+                <a href="persistence.html">
+            
+                    
+                    Persistence
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.17" data-path="configuring-transports.html">
+            
+                <a href="configuring-transports.html">
+            
+                    
+                    Configuring Transports
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.18" data-path="config-reload.html">
+            
+                <a href="config-reload.html">
+            
+                    
+                    Configuration Reload
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.19" data-path="connection-ttl.html">
+            
+                <a href="connection-ttl.html">
+            
+                    
+                    Detecting Dead Connections
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.20" data-path="slow-consumers.html">
+            
+                <a href="slow-consumers.html">
+            
+                    
+                    Detecting Slow Consumers
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.21" data-path="transaction-config.html">
+            
+                <a href="transaction-config.html">
+            
+                    
+                    Resource Manager Configuration
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.22" data-path="flow-control.html">
+            
+                <a href="flow-control.html">
+            
+                    
+                    Flow Control
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.23" data-path="send-guarantees.html">
+            
+                <a href="send-guarantees.html">
+            
+                    
+                    Guarantees of sends and commits
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.24" data-path="undelivered-messages.html">
+            
+                <a href="undelivered-messages.html">
+            
+                    
+                    Message Redelivery and Undelivered Messages
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.25" data-path="message-expiry.html">
+            
+                <a href="message-expiry.html">
+            
+                    
+                    Message Expiry
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.26" data-path="large-messages.html">
+            
+                <a href="large-messages.html">
+            
+                    
+                    Large Messages
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.27" data-path="paging.html">
+            
+                <a href="paging.html">
+            
+                    
+                    Paging
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.28" data-path="queue-attributes.html">
+            
+                <a href="queue-attributes.html">
+            
+                    
+                    Queue Attributes
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.29" data-path="scheduled-messages.html">
+            
+                <a href="scheduled-messages.html">
+            
+                    
+                    Scheduled Messages
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.30" data-path="last-value-queues.html">
+            
+                <a href="last-value-queues.html">
+            
+                    
+                    Last-Value Queues
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.31" data-path="message-grouping.html">
+            
+                <a href="message-grouping.html">
+            
+                    
+                    Message Grouping
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.32" data-path="pre-acknowledge.html">
+            
+                <a href="pre-acknowledge.html">
+            
+                    
+                    Extra Acknowledge Modes
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.33" data-path="management.html">
+            
+                <a href="management.html">
+            
+                    
+                    Management
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.34" data-path="security.html">
+            
+                <a href="security.html">
+            
+                    
+                    Security
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.35" data-path="resource-limits.html">
+            
+                <a href="resource-limits.html">
+            
+                    
+                    Resource Limits
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.36" data-path="jms-bridge.html">
+            
+                <a href="jms-bridge.html">
+            
+                    
+                    The JMS Bridge
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.37" data-path="client-reconnection.html">
+            
+                <a href="client-reconnection.html">
+            
+                    
+                    Client Reconnection and Session Reattachment
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.38" data-path="diverts.html">
+            
+                <a href="diverts.html">
+            
+                    
+                    Diverting and Splitting Message Flows
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.39" data-path="core-bridges.html">
+            
+                <a href="core-bridges.html">
+            
+                    
+                    Core Bridges
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.40" data-path="duplicate-detection.html">
+            
+                <a href="duplicate-detection.html">
+            
+                    
+                    Duplicate Message Detection
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.41" data-path="clusters.html">
+            
+                <a href="clusters.html">
+            
+                    
+                    Clusters
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.42" data-path="ha.html">
+            
+                <a href="ha.html">
+            
+                    
+                    High Availability and Failover
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.43" data-path="graceful-shutdown.html">
+            
+                <a href="graceful-shutdown.html">
+            
+                    
+                    Graceful Server Shutdown
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.44" data-path="libaio.html">
+            
+                <a href="libaio.html">
+            
+                    
+                    Libaio Native Libraries
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.45" data-path="thread-pooling.html">
+            
+                <a href="thread-pooling.html">
+            
+                    
+                    Thread management
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.46" data-path="logging.html">
+            
+                <a href="logging.html">
+            
+                    
+                    Logging
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.47" data-path="rest.html">
+            
+                <a href="rest.html">
+            
+                    
+                    REST Interface
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.48" data-path="embedding-activemq.html">
+            
+                <a href="embedding-activemq.html">
+            
+                    
+                    Embedding Apache ActiveMQ Artemis
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.49" data-path="karaf.html">
+            
+                <a href="karaf.html">
+            
+                    
+                    Apache Karaf
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.50" data-path="spring-integration.html">
+            
+                <a href="spring-integration.html">
+            
+                    
+                    Spring Integration
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.51" data-path="aerogear-integration.html">
+            
+                <a href="aerogear-integration.html">
+            
+                    
+                    AeroGear Integration
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.52" data-path="vertx-integration.html">
+            
+                <a href="vertx-integration.html">
+            
+                    
+                    VertX Integration
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.53" data-path="cdi-integration.html">
+            
+                <a href="cdi-integration.html">
+            
+                    
+                    CDI Integration
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.54" data-path="intercepting-operations.html">
+            
+                <a href="intercepting-operations.html">
+            
+                    
+                    Intercepting Operations
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.55" data-path="protocols-interoperability.html">
+            
+                <a href="protocols-interoperability.html">
+            
+                    
+                    Protocols and Interoperability
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.56" data-path="tools.html">
+            
+                <a href="tools.html">
+            
+                    
+                    Tools
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.57" data-path="maven-plugin.html">
+            
+                <a href="maven-plugin.html">
+            
+                    
+                    Maven Plugin
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.58" data-path="unit-testing.html">
+            
+                <a href="unit-testing.html">
+            
+                    
+                    Unit Testing
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter active" data-level="1.59" data-path="perf-tuning.html">
+            
+                <a href="perf-tuning.html">
+            
+                    
+                    Troubleshooting and Performance Tuning
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.60" data-path="configuration-index.html">
+            
+                <a href="configuration-index.html">
+            
+                    
+                    Configuration Reference
+            
+                </a>
+            
+
+            
+        </li>
+    
+
+    
+
+    <li class="divider"></li>
+
+    <li>
+        <a href="https://www.gitbook.com" target="blank" class="gitbook-link">
+            Published with GitBook
+        </a>
+    </li>
+</ul>
+
+
+                </nav>
+            
+        
+    </div>
+
+    <div class="book-body">
+        
+            <div class="body-inner">
+                
+                    
+
+<div class="book-header" role="navigation">
+    
+
+    <!-- Title -->
+    <h1>
+        <i class="fa fa-circle-o-notch fa-spin"></i>
+        <a href="." >Troubleshooting and Performance Tuning</a>
+    </h1>
+</div>
+
+
+
+
+                    <div class="page-wrapper" tabindex="-1" role="main">
+                        <div class="page-inner">
+                            
+<div id="book-search-results">
+    <div class="search-noresults">
+    
+                                <section class="normal markdown-section">
+                                
+                                <h1 id="performance-tuning">Performance Tuning</h1>
+<p>In this chapter we&apos;ll discuss how to tune Apache ActiveMQ Artemis for optimum
+performance.</p>
+<h2 id="tuning-persistence">Tuning persistence</h2>
+<ul>
+<li><p>Put the message journal on its own physical volume. If the disk is
+shared with other processes e.g. transaction co-ordinator, database
+or other journals which are also reading and writing from it, then
+this may greatly reduce performance since the disk head may be
+skipping all over the place between the different files. One of the
+advantages of an append only journal is that disk head movement is
+minimised - this advantage is destroyed if the disk is shared. If
+you&apos;re using paging or large messages make sure they&apos;re ideally put
+on separate volumes too.</p>
+</li>
+<li><p>Minimum number of journal files. Set <code>journal-min-files</code> to a number
+of files that would fit your average sustainable rate.  This number
+represents the lower threshold of the journal file pool.</p>
+</li>
+<li><p>To set the upper threshold of the journal file pool. (<code>journal-min-files</code> being
+the lower threshold).  Set <code>journal-pool-files</code> to a number that represents
+something near your maximum expected load.  The journal will spill over
+the pool should it need to, but will shrink back to the upper threshold, 
+when possible.  This allows reuse of files, without taking up more disk
+space than required.  If you see new files being created on the journal
+data directory too often, i.e. lots of data is being persisted, 
+you need to increase the journal-pool-size, this way the journal would
+reuse more files instead of creating new data files, increasing performance</p>
+</li>
+<li><p>Journal file size. The journal file size should be aligned to the
+capacity of a cylinder on the disk. The default value 10MiB should
+be enough on most systems.</p>
+</li>
+<li><p>Use AIO journal. If using Linux, try to keep your journal type as
+AIO. AIO will scale better than Java NIO.</p>
+</li>
+<li><p>Tune <code>journal-buffer-timeout</code>. The timeout can be increased to
+increase throughput at the expense of latency.</p>
+</li>
+<li><p>If you&apos;re running AIO you might be able to get some better
+performance by increasing <code>journal-max-io</code>. DO NOT change this
+parameter if you are running NIO.</p>
+</li>
+</ul>
+<h2 id="tuning-jms">Tuning JMS</h2>
+<p>There are a few areas where some tweaks can be done if you are using the
+JMS API</p>
+<ul>
+<li><p>Disable message id. Use the <code>setDisableMessageID()</code> method on the
+<code>MessageProducer</code> class to disable message ids if you don&apos;t need
+them. This decreases the size of the message and also avoids the
+overhead of creating a unique ID.</p>
+</li>
+<li><p>Disable message timestamp. Use the <code>setDisableMessageTimeStamp()</code>
+method on the <code>MessageProducer</code> class to disable message timestamps
+if you don&apos;t need them.</p>
+</li>
+<li><p>Avoid <code>ObjectMessage</code>. <code>ObjectMessage</code> is convenient but it comes at
+a cost. The body of a <code>ObjectMessage</code> uses Java serialization to
+serialize it to bytes. The Java serialized form of even small
+objects is very verbose so takes up a lot of space on the wire, also
+Java serialization is slow compared to custom marshalling
+techniques. Only use <code>ObjectMessage</code> if you really can&apos;t use one of
+the other message types, i.e. if you really don&apos;t know the type of
+the payload until run-time.</p>
+</li>
+<li><p>Avoid <code>AUTO_ACKNOWLEDGE</code>. <code>AUTO_ACKNOWLEDGE</code> mode requires an
+acknowledgement to be sent from the server for each message received
+on the client, this means more traffic on the network. If you can,
+use <code>DUPS_OK_ACKNOWLEDGE</code> or use <code>CLIENT_ACKNOWLEDGE</code> or a
+transacted session and batch up many acknowledgements with one
+acknowledge/commit.</p>
+</li>
+<li><p>Avoid durable messages. By default JMS messages are durable. If you
+don&apos;t really need durable messages then set them to be non-durable.
+Durable messages incur a lot more overhead in persisting them to
+storage.</p>
+</li>
+<li><p>Batch many sends or acknowledgements in a single transaction.
+Apache ActiveMQ Artemis will only require a network round trip on the commit, not
+on every send or acknowledgement.</p>
+</li>
+</ul>
+<h2 id="other-tunings">Other Tunings</h2>
+<p>There are various other places in Apache ActiveMQ Artemis where we can perform some
+tuning:</p>
+<ul>
+<li><p>Use Asynchronous Send Acknowledgements. If you need to send durable
+messages non transactionally and you need a guarantee that they have
+reached the server by the time the call to send() returns, don&apos;t set
+durable messages to be sent blocking, instead use asynchronous send
+acknowledgements to get your acknowledgements of send back in a
+separate stream, see <a href="send-guarantees.html">Guarantees of sends and commits</a>
+for more information on this.</p>
+</li>
+<li><p>Use pre-acknowledge mode. With pre-acknowledge mode, messages are
+acknowledged <code>before</code> they are sent to the client. This reduces the
+amount of acknowledgement traffic on the wire. For more information
+on this, see <a href="pre-acknowledge.html">Extra Acknowledge Modes</a>.</p>
+</li>
+<li><p>Disable security. You may get a small performance boost by disabling
+security by setting the <code>security-enabled</code> parameter to <code>false</code> in
+<code>broker.xml</code>.</p>
+</li>
+<li><p>Disable persistence. If you don&apos;t need message persistence, turn it
+off altogether by setting <code>persistence-enabled</code> to false in
+<code>broker.xml</code>.</p>
+</li>
+<li><p>Sync transactions lazily. Setting <code>journal-sync-transactional</code> to
+<code>false</code> in <code>broker.xml</code> can give you better
+transactional persistent performance at the expense of some
+possibility of loss of transactions on failure. See  <a href="send-guarantees.html">Guarantees of sends and commits</a>
+for more information.</p>
+</li>
+<li><p>Sync non transactional lazily. Setting
+<code>journal-sync-non-transactional</code> to <code>false</code> in
+<code>broker.xml</code> can give you better non-transactional
+persistent performance at the expense of some possibility of loss of
+durable messages on failure. See  <a href="send-guarantees.html">Guarantees of sends and commits</a>
+for more information.</p>
+</li>
+<li><p>Send messages non blocking. Setting <code>block-on-durable-send</code> and
+<code>block-on-non-durable-send</code> to <code>false</code> in the jms config (if
+you&apos;re using JMS and JNDI) or directly on the ServerLocator. This
+means you don&apos;t have to wait a whole network round trip for every
+message sent. See  <a href="send-guarantees.html">Guarantees of sends and commits</a>
+for more information.</p>
+</li>
+<li><p>If you have very fast consumers, you can increase
+consumer-window-size. This effectively disables consumer flow
+control.</p>
+</li>
+<li><p>Use the core API not JMS. Using the JMS API you will have slightly
+lower performance than using the core API, since all JMS operations
+need to be translated into core operations before the server can
+handle them. If using the core API try to use methods that take
+<code>SimpleString</code> as much as possible. <code>SimpleString</code>, unlike
+java.lang.String does not require copying before it is written to
+the wire, so if you re-use <code>SimpleString</code> instances between calls
+then you can avoid some unnecessary copying.</p>
+</li>
+</ul>
+<h2 id="tuning-transport-settings">Tuning Transport Settings</h2>
+<ul>
+<li><p>TCP buffer sizes. If you have a fast network and fast machines you
+may get a performance boost by increasing the TCP send and receive
+buffer sizes. See the <a href="configuring-transports.html">Configuring the Transport</a>
+for more information on this.</p>
+<blockquote>
+<p><strong>Note</strong></p>
+<p>Note that some operating systems like later versions of Linux
+include TCP auto-tuning and setting TCP buffer sizes manually can
+prevent auto-tune from working and actually give you worse
+performance!</p>
+</blockquote>
+</li>
+<li><p>Increase limit on file handles on the server. If you expect a lot of
+concurrent connections on your servers, or if clients are rapidly
+opening and closing connections, you should make sure the user
+running the server has permission to create sufficient file handles.</p>
+<p>This varies from operating system to operating system. On Linux
+systems you can increase the number of allowable open file handles
+in the file <code>/etc/security/limits.conf</code> e.g. add the lines</p>
+<pre><code>serveruser     soft    nofile  20000
+serveruser     hard    nofile  20000
+</code></pre><p>This would allow up to 20000 file handles to be open by the user
+<code>serveruser</code>.</p>
+</li>
+<li><p>Use <code>batch-delay</code> and set <code>direct-deliver</code> to false for the best
+throughput for very small messages. Apache ActiveMQ Artemis comes with a
+preconfigured connector/acceptor pair (<code>netty-throughput</code>) in
+<code>broker.xml</code> and JMS connection factory
+(<code>ThroughputConnectionFactory</code>) in <code>activemq-jms.xml</code>which can be
+used to give the very best throughput, especially for small
+messages. See the <a href="configuring-transports.html">Configuring the Transport</a>
+for more information on this.</p>
+</li>
+</ul>
+<h2 id="tuning-the-vm">Tuning the VM</h2>
+<p>We highly recommend you use the latest Java JVM for the best
+performance. We test internally using the Sun JVM, so some of these
+tunings won&apos;t apply to JDKs from other providers (e.g. IBM or JRockit)</p>
+<ul>
+<li><p>Garbage collection. For smooth server operation we recommend using a
+parallel garbage collection algorithm, e.g. using the JVM argument
+<code>-XX:+UseParallelOldGC</code> on Sun JDKs.</p>
+</li>
+<li><p>Memory settings. Give as much memory as you can to the server.
+Apache ActiveMQ Artemis can run in low memory by using paging (described in <a href="paging.html">Paging</a>) but
+if it can run with all queues in RAM this will improve performance.
+The amount of memory you require will depend on the size and number
+of your queues and the size and number of your messages. Use the JVM
+arguments <code>-Xms</code> and <code>-Xmx</code> to set server available RAM. We
+recommend setting them to the same high value.</p>
+</li>
+<li><p>Aggressive options. Different JVMs provide different sets of JVM
+tuning parameters, for the Sun Hotspot JVM the full list of options
+is available
+<a href="http://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.html" target="_blank">here</a>.
+We recommend at least using <code>-XX:+AggressiveOpts</code> and <code>-XX:+UseFastAccessorMethods</code>.
+You may get some mileage with the other tuning parameters depending
+on your OS platform and application usage patterns.</p>
+</li>
+</ul>
+<h2 id="avoiding-anti-patterns">Avoiding Anti-Patterns</h2>
+<ul>
+<li><p>Re-use connections / sessions / consumers / producers. Probably the
+most common messaging anti-pattern we see is users who create a new
+connection/session/producer for every message they send or every
+message they consume. This is a poor use of resources. These objects
+take time to create and may involve several network round trips.
+Always re-use them.</p>
+<blockquote>
+<p><strong>Note</strong></p>
+<p>Some popular libraries such as the Spring JMS Template are known
+to use these anti-patterns. If you&apos;re using Spring JMS Template
+and you&apos;re getting poor performance you know why. Don&apos;t blame
+Apache ActiveMQ Artemis! The Spring JMS Template can only safely be used in an
+app server which caches JMS sessions (e.g. using JCA), and only
+then for sending messages. It cannot be safely be used for
+synchronously consuming messages, even in an app server.</p>
+</blockquote>
+</li>
+<li><p>Avoid fat messages. Verbose formats such as XML take up a lot of
+space on the wire and performance will suffer as result. Avoid XML
+in message bodies if you can.</p>
+</li>
+<li><p>Don&apos;t create temporary queues for each request. This common
+anti-pattern involves the temporary queue request-response pattern.
+With the temporary queue request-response pattern a message is sent
+to a target and a reply-to header is set with the address of a local
+temporary queue. When the recipient receives the message they
+process it then send back a response to the address specified in the
+reply-to. A common mistake made with this pattern is to create a new
+temporary queue on each message sent. This will drastically reduce
+performance. Instead the temporary queue should be re-used for many
+requests.</p>
+</li>
+<li><p>Don&apos;t use Message-Driven Beans for the sake of it. As soon as you
+start using MDBs you are greatly increasing the codepath for each
+message received compared to a straightforward message consumer,
+since a lot of extra application server code is executed. Ask
+yourself do you really need MDBs? Can you accomplish the same task
+using just a normal message consumer?</p>
+</li>
+</ul>
+<h2 id="troubleshooting">Troubleshooting</h2>
+<h3 id="udp-not-working">UDP not working</h3>
+<p>In certain situations UDP used on discovery may not work. Typical situations are:</p>
+<ol>
+<li>The nodes are behind a firewall. If your nodes are on different machines then it is possible that the firewall is blocking the multicasts. you can test this by disabling the firewall for each node or adding the appropriate rules.</li>
+<li>You are using a home network or are behind a gateway. Typically home networks will redirect any UDP traffic to the Internet Service Provider which is then either dropped by the ISP or just lost. To fix this you will need to add a route to the firewall/gateway that will redirect any multicast traffic back on to the local network instead.</li>
+<li><p>All the nodes are in one machine. If this is the case then it is a similar problem to point 2 and the same solution should fix it. Alternatively you could add a multicast route to the loopback interface. On linux the command would be:</p>
+<pre><code class="lang-sh"><span class="hljs-comment"># you should run this as root</span>
+route add -net 224.0.0.0 netmask 240.0.0.0 dev lo
+</code></pre>
+<p>This will redirect any traffic directed to the 224.0.0.0 to the loopback interface. This will also work if you have no network at all.</p>
+<ul>
+<li>on Mac OS X, the command is slightly different:<pre><code class="lang-sh">sudo route add 224.0.0.0 127.0.0.1 -netmask 240.0.0.0
+</code></pre>
+</li>
+</ul>
+</li>
+</ol>
+
+                                
+                                </section>
+                            
+    </div>
+    <div class="search-results">
+        <div class="has-results">
+            
+            <h1 class="search-results-title"><span class='search-results-count'></span> results matching "<span class='search-query'></span>"</h1>
+            <ul class="search-results-list"></ul>
+            
+        </div>
+        <div class="no-results">
+            
+            <h1 class="search-results-title">No results matching "<span class='search-query'></span>"</h1>
+            
+        </div>
+    </div>
+</div>
+
+                        </div>
+                    </div>
+                
+            </div>
+
+            
+                
+                <a href="unit-testing.html" class="navigation navigation-prev " aria-label="Previous page: Unit Testing">
+                    <i class="fa fa-angle-left"></i>
+                </a>
+                
+                
+                <a href="configuration-index.html" class="navigation navigation-next " aria-label="Next page: Configuration Reference">
+                    <i class="fa fa-angle-right"></i>
+                </a>
+                
+            
+        
+    </div>
+
+    <script>
+        var gitbook = gitbook || [];
+        gitbook.push(function() {
+            gitbook.page.hasChanged({"page":{"title":"Troubleshooting and Performance Tuning","level":"1.59","depth":1,"next":{"title":"Configuration Reference","level":"1.60","depth":1,"path":"configuration-index.md","ref":"configuration-index.md","articles":[]},"previous":{"title":"Unit Testing","level":"1.58","depth":1,"path":"unit-testing.md","ref":"unit-testing.md","articles":[]},"dir":"ltr"},"config":{"plugins":[],"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mo
 bi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"github":"apache/activemq-artemis","theme":"default","githubHost":"https://github.com/","pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"variables":{},"title":"ActiveMQ Artemis Documentation","links":{"home":"http://activemq.apache.org/","issues":"http://activemq.apache.org/","contribute":"http://activemq.apache.org/contributing.html"},"gitbook":"3.x.x","description":"ActiveMQ Artemis User Guide and Reference Documentation"},"file":{"path":"perf-tuning.md","mtime":"2016-11-12T00:49:50.000Z","type":"markdown"},"gitbook":{"version":"3.1.1","time":"2016-11-12T01:00:04.718Z"},"basePath":".","book":{"language":""}});
+        });
+    </script>
+</div>
+
+        
+    <script src="gitbook/gitbook.js"></script>
+    <script src="gitbook/theme.js"></script>
+    
+        
+        <script src="gitbook/gitbook-plugin-search/search-engine.js"></script>
+        
+    
+        
+        <script src="gitbook/gitbook-plugin-search/search.js"></script>
+        
+    
+        
+        <script src="gitbook/gitbook-plugin-lunr/lunr.min.js"></script>
+        
+    
+        
+        <script src="gitbook/gitbook-plugin-lunr/search-lunr.js"></script>
+        
+    
+        
+        <script src="gitbook/gitbook-plugin-sharing/buttons.js"></script>
+        
+    
+        
+        <script src="gitbook/gitbook-plugin-fontsettings/fontsettings.js"></script>
+        
+    
+
+    </body>
+</html>
+

Added: websites/production/activemq/content/artemis/docs/1.5.4/persistence.html
==============================================================================
--- websites/production/activemq/content/artemis/docs/1.5.4/persistence.html (added)
+++ websites/production/activemq/content/artemis/docs/1.5.4/persistence.html Sun Mar 12 16:08:18 2017
@@ -0,0 +1,1344 @@
+
+<!DOCTYPE HTML>
+<html lang="" >
+    <head>
+        <title>Persistence · ActiveMQ Artemis Documentation</title>
+        <meta charset="UTF-8">
+        <meta http-equiv="X-UA-Compatible" content="IE=edge" />
+        <meta content="text/html; charset=utf-8" http-equiv="Content-Type">
+        <meta name="description" content="">
+        <meta name="generator" content="GitBook 3.1.1">
+        
+        
+        
+    
+    <link rel="stylesheet" href="gitbook/style.css">
+
+    
+            
+                
+                <link rel="stylesheet" href="gitbook/gitbook-plugin-highlight/website.css">
+                
+            
+                
+                <link rel="stylesheet" href="gitbook/gitbook-plugin-search/search.css">
+                
+            
+                
+                <link rel="stylesheet" href="gitbook/gitbook-plugin-fontsettings/website.css">
+                
+            
+        
+
+    
+
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+
+        
+    
+    
+    <meta name="HandheldFriendly" content="true"/>
+    <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
+    <meta name="apple-mobile-web-app-capable" content="yes">
+    <meta name="apple-mobile-web-app-status-bar-style" content="black">
+    <link rel="apple-touch-icon-precomposed" sizes="152x152" href="gitbook/images/apple-touch-icon-precomposed-152.png">
+    <link rel="shortcut icon" href="gitbook/images/favicon.ico" type="image/x-icon">
+
+    
+    <link rel="next" href="configuring-transports.html" />
+    
+    
+    <link rel="prev" href="filter-expressions.html" />
+    
+
+    </head>
+    <body>
+        
+<div class="book">
+    <div class="book-summary">
+        
+            
+<div id="book-search-input" role="search">
+    <input type="text" placeholder="Type to search" />
+</div>
+
+            
+                <nav role="navigation">
+                
+
+
+<ul class="summary">
+    
+    
+
+    
+
+    
+        
+        
+    
+        <li class="chapter " data-level="1.1" data-path="./">
+            
+                <a href="./">
+            
+                    
+                    Introduction
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.2" data-path="notice.html">
+            
+                <a href="notice.html">
+            
+                    
+                    Legal Notice
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.3" data-path="preface.html">
+            
+                <a href="preface.html">
+            
+                    
+                    Preface
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.4" data-path="project-info.html">
+            
+                <a href="project-info.html">
+            
+                    
+                    Project Info
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.5" data-path="messaging-concepts.html">
+            
+                <a href="messaging-concepts.html">
+            
+                    
+                    Messaging Concepts
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6" data-path="architecture.html">
+            
+                <a href="architecture.html">
+            
+                    
+                    Architecture
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.7" data-path="using-server.html">
+            
+                <a href="using-server.html">
+            
+                    
+                    Using the Server
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.8" data-path="using-jms.html">
+            
+                <a href="using-jms.html">
+            
+                    
+                    Using JMS
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.9" data-path="using-core.html">
+            
+                <a href="using-core.html">
+            
+                    
+                    Using Core
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.10" data-path="jms-core-mapping.html">
+            
+                <a href="jms-core-mapping.html">
+            
+                    
+                    Mapping JMS Concepts to the Core API
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.11" data-path="client-classpath.html">
+            
+                <a href="client-classpath.html">
+            
+                    
+                    The Client Classpath
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.12" data-path="examples.html">
+            
+                <a href="examples.html">
+            
+                    
+                    Examples
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.13" data-path="wildcard-routing.html">
+            
+                <a href="wildcard-routing.html">
+            
+                    
+                    Routing Messages With Wild Cards
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.14" data-path="wildcard-syntax.html">
+            
+                <a href="wildcard-syntax.html">
+            
+                    
+                    Understanding the Apache ActiveMQ Artemis Wildcard Syntax
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.15" data-path="filter-expressions.html">
+            
+                <a href="filter-expressions.html">
+            
+                    
+                    Filter Expressions
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter active" data-level="1.16" data-path="persistence.html">
+            
+                <a href="persistence.html">
+            
+                    
+                    Persistence
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.17" data-path="configuring-transports.html">
+            
+                <a href="configuring-transports.html">
+            
+                    
+                    Configuring Transports
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.18" data-path="config-reload.html">
+            
+                <a href="config-reload.html">
+            
+                    
+                    Configuration Reload
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.19" data-path="connection-ttl.html">
+            
+                <a href="connection-ttl.html">
+            
+                    
+                    Detecting Dead Connections
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.20" data-path="slow-consumers.html">
+            
+                <a href="slow-consumers.html">
+            
+                    
+                    Detecting Slow Consumers
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.21" data-path="transaction-config.html">
+            
+                <a href="transaction-config.html">
+            
+                    
+                    Resource Manager Configuration
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.22" data-path="flow-control.html">
+            
+                <a href="flow-control.html">
+            
+                    
+                    Flow Control
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.23" data-path="send-guarantees.html">
+            
+                <a href="send-guarantees.html">
+            
+                    
+                    Guarantees of sends and commits
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.24" data-path="undelivered-messages.html">
+            
+                <a href="undelivered-messages.html">
+            
+                    
+                    Message Redelivery and Undelivered Messages
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.25" data-path="message-expiry.html">
+            
+                <a href="message-expiry.html">
+            
+                    
+                    Message Expiry
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.26" data-path="large-messages.html">
+            
+                <a href="large-messages.html">
+            
+                    
+                    Large Messages
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.27" data-path="paging.html">
+            
+                <a href="paging.html">
+            
+                    
+                    Paging
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.28" data-path="queue-attributes.html">
+            
+                <a href="queue-attributes.html">
+            
+                    
+                    Queue Attributes
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.29" data-path="scheduled-messages.html">
+            
+                <a href="scheduled-messages.html">
+            
+                    
+                    Scheduled Messages
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.30" data-path="last-value-queues.html">
+            
+                <a href="last-value-queues.html">
+            
+                    
+                    Last-Value Queues
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.31" data-path="message-grouping.html">
+            
+                <a href="message-grouping.html">
+            
+                    
+                    Message Grouping
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.32" data-path="pre-acknowledge.html">
+            
+                <a href="pre-acknowledge.html">
+            
+                    
+                    Extra Acknowledge Modes
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.33" data-path="management.html">
+            
+                <a href="management.html">
+            
+                    
+                    Management
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.34" data-path="security.html">
+            
+                <a href="security.html">
+            
+                    
+                    Security
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.35" data-path="resource-limits.html">
+            
+                <a href="resource-limits.html">
+            
+                    
+                    Resource Limits
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.36" data-path="jms-bridge.html">
+            
+                <a href="jms-bridge.html">
+            
+                    
+                    The JMS Bridge
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.37" data-path="client-reconnection.html">
+            
+                <a href="client-reconnection.html">
+            
+                    
+                    Client Reconnection and Session Reattachment
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.38" data-path="diverts.html">
+            
+                <a href="diverts.html">
+            
+                    
+                    Diverting and Splitting Message Flows
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.39" data-path="core-bridges.html">
+            
+                <a href="core-bridges.html">
+            
+                    
+                    Core Bridges
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.40" data-path="duplicate-detection.html">
+            
+                <a href="duplicate-detection.html">
+            
+                    
+                    Duplicate Message Detection
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.41" data-path="clusters.html">
+            
+                <a href="clusters.html">
+            
+                    
+                    Clusters
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.42" data-path="ha.html">
+            
+                <a href="ha.html">
+            
+                    
+                    High Availability and Failover
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.43" data-path="graceful-shutdown.html">
+            
+                <a href="graceful-shutdown.html">
+            
+                    
+                    Graceful Server Shutdown
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.44" data-path="libaio.html">
+            
+                <a href="libaio.html">
+            
+                    
+                    Libaio Native Libraries
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.45" data-path="thread-pooling.html">
+            
+                <a href="thread-pooling.html">
+            
+                    
+                    Thread management
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.46" data-path="logging.html">
+            
+                <a href="logging.html">
+            
+                    
+                    Logging
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.47" data-path="rest.html">
+            
+                <a href="rest.html">
+            
+                    
+                    REST Interface
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.48" data-path="embedding-activemq.html">
+            
+                <a href="embedding-activemq.html">
+            
+                    
+                    Embedding Apache ActiveMQ Artemis
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.49" data-path="karaf.html">
+            
+                <a href="karaf.html">
+            
+                    
+                    Apache Karaf
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.50" data-path="spring-integration.html">
+            
+                <a href="spring-integration.html">
+            
+                    
+                    Spring Integration
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.51" data-path="aerogear-integration.html">
+            
+                <a href="aerogear-integration.html">
+            
+                    
+                    AeroGear Integration
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.52" data-path="vertx-integration.html">
+            
+                <a href="vertx-integration.html">
+            
+                    
+                    VertX Integration
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.53" data-path="cdi-integration.html">
+            
+                <a href="cdi-integration.html">
+            
+                    
+                    CDI Integration
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.54" data-path="intercepting-operations.html">
+            
+                <a href="intercepting-operations.html">
+            
+                    
+                    Intercepting Operations
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.55" data-path="protocols-interoperability.html">
+            
+                <a href="protocols-interoperability.html">
+            
+                    
+                    Protocols and Interoperability
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.56" data-path="tools.html">
+            
+                <a href="tools.html">
+            
+                    
+                    Tools
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.57" data-path="maven-plugin.html">
+            
+                <a href="maven-plugin.html">
+            
+                    
+                    Maven Plugin
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.58" data-path="unit-testing.html">
+            
+                <a href="unit-testing.html">
+            
+                    
+                    Unit Testing
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.59" data-path="perf-tuning.html">
+            
+                <a href="perf-tuning.html">
+            
+                    
+                    Troubleshooting and Performance Tuning
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.60" data-path="configuration-index.html">
+            
+                <a href="configuration-index.html">
+            
+                    
+                    Configuration Reference
+            
+                </a>
+            
+
+            
+        </li>
+    
+
+    
+
+    <li class="divider"></li>
+
+    <li>
+        <a href="https://www.gitbook.com" target="blank" class="gitbook-link">
+            Published with GitBook
+        </a>
+    </li>
+</ul>
+
+
+                </nav>
+            
+        
+    </div>
+
+    <div class="book-body">
+        
+            <div class="body-inner">
+                
+                    
+
+<div class="book-header" role="navigation">
+    
+
+    <!-- Title -->
+    <h1>
+        <i class="fa fa-circle-o-notch fa-spin"></i>
+        <a href="." >Persistence</a>
+    </h1>
+</div>
+
+
+
+
+                    <div class="page-wrapper" tabindex="-1" role="main">
+                        <div class="page-inner">
+                            
+<div id="book-search-results">
+    <div class="search-noresults">
+    
+                                <section class="normal markdown-section">
+                                
+                                <h1 id="persistence">Persistence</h1>
+<p>In this chapter we will describe how persistence works with Apache ActiveMQ Artemis and
+how to configure it.</p>
+<p>Apache ActiveMQ Artemis ships with two persistence options.  The Apache ActiveMQ Artemis File journal
+which is highly optimized for the messaging use case and gives great performance, and also Apache Artemis
+JDBC Store, which uses JDBC to connect to a database of your choice.  The JDBC Store is still under development,
+but it is possible to use it&apos;s journal features, (essentially everything except for paging and large messages).</p>
+<h2 id="apache-activemq-artemis-file-journal-default">Apache ActiveMQ Artemis File Journal (Default)</h2>
+<p>An Apache ActiveMQ Artemis file journal is an <em>append only</em> journal. It consists of a set of
+files on disk. Each file is pre-created to a fixed size and initially
+filled with padding. As operations are performed on the server, e.g. add
+message, update message, delete message, records are appended to the
+journal. When one journal file is full we move to the next one.</p>
+<p>Because records are only appended, i.e. added to the end of the journal
+we minimise disk head movement, i.e. we minimise random access
+operations which is typically the slowest operation on a disk.</p>
+<p>Making the file size configurable means that an optimal size can be
+chosen, i.e. making each file fit on a disk cylinder. Modern disk
+topologies are complex and we are not in control over which cylinder(s)
+the file is mapped onto so this is not an exact science. But by
+minimising the number of disk cylinders the file is using, we can
+minimise the amount of disk head movement, since an entire disk cylinder
+is accessible simply by the disk rotating - the head does not have to
+move.</p>
+<p>As delete records are added to the journal, Apache ActiveMQ Artemis has a sophisticated
+file garbage collection algorithm which can determine if a particular
+journal file is needed any more - i.e. has all its data been deleted in
+the same or other files. If so, the file can be reclaimed and re-used.</p>
+<p>Apache ActiveMQ Artemis also has a compaction algorithm which removes dead space from
+the journal and compresses up the data so it takes up less files on
+disk.</p>
+<p>The journal also fully supports transactional operation if required,
+supporting both local and XA transactions.</p>
+<p>The majority of the journal is written in Java, however we abstract out
+the interaction with the actual file system to allow different pluggable
+implementations. Apache ActiveMQ Artemis ships with two implementations:</p>
+<ul>
+<li><p>Java <a href="http://en.wikipedia.org/wiki/New_I/O" target="_blank">NIO</a>.</p>
+<p>The first implementation uses standard Java NIO to interface with
+the file system. This provides extremely good performance and runs
+on any platform where there&apos;s a Java 6+ runtime.</p>
+</li>
+<li><p>Linux Asynchronous IO</p>
+<p>The second implementation uses a thin native code wrapper to talk to
+the Linux asynchronous IO library (AIO). With AIO, Apache ActiveMQ Artemis will be
+called back when the data has made it to disk, allowing us to avoid
+explicit syncs altogether and simply send back confirmation of
+completion when AIO informs us that the data has been persisted.</p>
+<p>Using AIO will typically provide even better performance than using
+Java NIO.</p>
+<p>The AIO journal is only available when running Linux kernel 2.6 or
+later and after having installed libaio (if it&apos;s not already
+installed). For instructions on how to install libaio please see Installing AIO section.</p>
+<p>Also, please note that AIO will only work with the following file
+systems: ext2, ext3, ext4, jfs, xfs. With other file systems, e.g.
+NFS it may appear to work, but it will fall back to a slower
+synchronous behaviour. Don&apos;t put the journal on a NFS share!</p>
+<p>For more information on libaio please see <a href="libaio.html">lib AIO</a>.</p>
+<p>libaio is part of the kernel project.</p>
+</li>
+</ul>
+<p>The standard Apache ActiveMQ Artemis core server uses two instances of the journal:</p>
+<ul>
+<li><p>Bindings journal.</p>
+<p>This journal is used to store bindings related data. That includes
+the set of queues that are deployed on the server and their
+attributes. It also stores data such as id sequence counters.</p>
+<p>The bindings journal is always a NIO journal as it is typically low
+throughput compared to the message journal.</p>
+<p>The files on this journal are prefixed as <code>activemq-bindings</code>. Each
+file has a <code>bindings</code> extension. File size is <code>1048576</code>, and it is
+located at the bindings folder.</p>
+</li>
+<li><p>JMS journal.</p>
+<p>This journal instance stores all JMS related data, This is basically
+any JMS Queues, Topics and Connection Factories and any JNDI
+bindings for these resources.</p>
+<p>Any JMS Resources created via the management API will be persisted
+to this journal. Any resources configured via configuration files
+will not. The JMS Journal will only be created if JMS is being used.</p>
+<p>The files on this journal are prefixed as <code>activemq-jms</code>. Each file
+has a <code>jms</code> extension. File size is <code>1048576</code>, and it is located at
+the bindings folder.</p>
+</li>
+<li><p>Message journal.</p>
+<p>This journal instance stores all message related data, including the
+message themselves and also duplicate-id caches.</p>
+<p>By default Apache ActiveMQ Artemis will try and use an AIO journal. If AIO is not
+available, e.g. the platform is not Linux with the correct kernel
+version or AIO has not been installed then it will automatically
+fall back to using Java NIO which is available on any Java platform.</p>
+<p>The files on this journal are prefixed as <code>activemq-data</code>. Each file
+has a <code>amq</code> extension. File size is by the default <code>10485760</code>
+(configurable), and it is located at the journal folder.</p>
+</li>
+</ul>
+<p>For large messages, Apache ActiveMQ Artemis persists them outside the message journal.
+This is discussed in <a href="large-messages.html">Large Messages</a>.</p>
+<p>Apache ActiveMQ Artemis can also be configured to page messages to disk in low memory
+situations. This is discussed in <a href="paging.html">Paging</a>.</p>
+<p>If no persistence is required at all, Apache ActiveMQ Artemis can also be configured
+not to persist any data at all to storage as discussed in the Configuring
+the broker for Zero Persistence section.</p>
+<h3 id="configuring-the-bindings-journal">Configuring the bindings journal</h3>
+<p>The bindings journal is configured using the following attributes in
+<code>broker.xml</code></p>
+<ul>
+<li><p><code>bindings-directory</code></p>
+<p>This is the directory in which the bindings journal lives. The
+default value is <code>data/bindings</code>.</p>
+</li>
+<li><p><code>create-bindings-dir</code></p>
+<p>If this is set to <code>true</code> then the bindings directory will be
+automatically created at the location specified in
+<code>bindings-directory</code> if it does not already exist. The default value
+is <code>true</code></p>
+</li>
+</ul>
+<h3 id="configuring-the-jms-journal">Configuring the jms journal</h3>
+<p>The jms config shares its configuration with the bindings journal.</p>
+<h3 id="configuring-the-message-journal">Configuring the message journal</h3>
+<p>The message journal is configured using the following attributes in
+<code>broker.xml</code></p>
+<ul>
+<li><p><code>journal-directory</code></p>
+<p>This is the directory in which the message journal lives. The
+default value is <code>data/journal</code>.</p>
+<p>For the best performance, we recommend the journal is located on its
+own physical volume in order to minimise disk head movement. If the
+journal is on a volume which is shared with other processes which
+might be writing other files (e.g. bindings journal, database, or
+transaction coordinator) then the disk head may well be moving
+rapidly between these files as it writes them, thus drastically
+reducing performance.</p>
+<p>When the message journal is stored on a SAN we recommend each
+journal instance that is stored on the SAN is given its own LUN
+(logical unit).</p>
+</li>
+<li><p><code>create-journal-dir</code></p>
+<p>If this is set to <code>true</code> then the journal directory will be
+automatically created at the location specified in
+<code>journal-directory</code> if it does not already exist. The default value
+is <code>true</code></p>
+</li>
+<li><p><code>journal-type</code></p>
+<p>Valid values are <code>NIO</code> or <code>ASYNCIO</code>.</p>
+<p>Choosing <code>NIO</code> chooses the Java NIO journal. Choosing <code>AIO</code> chooses
+the Linux asynchronous IO journal. If you choose <code>AIO</code> but are not
+running Linux or you do not have libaio installed then Apache ActiveMQ Artemis will
+detect this and automatically fall back to using <code>NIO</code>.</p>
+</li>
+<li><p><code>journal-sync-transactional</code></p>
+<p>If this is set to true then Apache ActiveMQ Artemis will make sure all transaction
+data is flushed to disk on transaction boundaries (commit, prepare
+and rollback). The default value is <code>true</code>.</p>
+</li>
+<li><p><code>journal-sync-non-transactional</code></p>
+<p>If this is set to true then Apache ActiveMQ Artemis will make sure non
+transactional message data (sends and acknowledgements) are flushed
+to disk each time. The default value for this is <code>true</code>.</p>
+</li>
+<li><p><code>journal-file-size</code></p>
+<p>The size of each journal file in bytes. The default value for this
+is <code>10485760</code> bytes (10MiB).</p>
+</li>
+<li><p><code>journal-min-files</code></p>
+<p>The minimum number of files the journal will maintain. When Apache ActiveMQ Artemis
+starts and there is no initial message data, Apache ActiveMQ Artemis will
+pre-create <code>journal-min-files</code> number of files.</p>
+<p>Creating journal files and filling them with padding is a fairly
+expensive operation and we want to minimise doing this at run-time
+as files get filled. By pre-creating files, as one is filled the
+journal can immediately resume with the next one without pausing to
+create it.</p>
+<p>Depending on how much data you expect your queues to contain at
+steady state you should tune this number of files to match that
+total amount of data.</p>
+</li>
+<li><p><code>journal-pool-files</code></p>
+<p>The system will create as many files as needed however when reclaiming files
+it will shrink back to the <code>journal-pool-files</code>.</p>
+<p>The default to this parameter is -1, meaning it will never delete files on the journal once created.</p>
+<p>Notice that the system can&apos;t grow infinitely as you are still required to use paging for destinations that can
+grow indefinitely.</p>
+<p>Notice: in case you get too many files you can use <a href="tools.html">compacting</a>.</p>
+</li>
+<li><p><code>journal-max-io</code></p>
+<p>Write requests are queued up before being submitted to the system
+for execution. This parameter controls the maximum number of write
+requests that can be in the IO queue at any one time. If the queue
+becomes full then writes will block until space is freed up.</p>
+<p>When using NIO, this value should always be equal to <code>1</code></p>
+<p>When using AIO, the default should be <code>500</code>.</p>
+<p>The system maintains different defaults for this parameter depending
+on whether it&apos;s NIO or AIO (default for NIO is 1, default for AIO is
+500)</p>
+<p>There is a limit and the total max AIO can&apos;t be higher than what is
+configured at the OS level (/proc/sys/fs/aio-max-nr) usually at
+65536.</p>
+</li>
+<li><p><code>journal-buffer-timeout</code></p>
+<p>Instead of flushing on every write that requires a flush, we
+maintain an internal buffer, and flush the entire buffer either when
+it is full, or when a timeout expires, whichever is sooner. This is
+used for both NIO and AIO and allows the system to scale better with
+many concurrent writes that require flushing.</p>
+<p>This parameter controls the timeout at which the buffer will be
+flushed if it hasn&apos;t filled already. AIO can typically cope with a
+higher flush rate than NIO, so the system maintains different
+defaults for both NIO and AIO (default for NIO is 3333333
+nanoseconds - 300 times per second, default for AIO is 500000
+nanoseconds - ie. 2000 times per second).</p>
+<blockquote>
+<p><strong>Note</strong></p>
+<p>By increasing the timeout, you may be able to increase system
+throughput at the expense of latency, the default parameters are
+chosen to give a reasonable balance between throughput and
+latency.</p>
+</blockquote>
+</li>
+<li><p><code>journal-buffer-size</code></p>
+<p>The size of the timed buffer on AIO. The default value is <code>490KiB</code>.</p>
+</li>
+<li><p><code>journal-compact-min-files</code></p>
+<p>The minimal number of files before we can consider compacting the
+journal. The compacting algorithm won&apos;t start until you have at
+least <code>journal-compact-min-files</code></p>
+<p>Setting this to 0 will disable the feature to compact completely.
+This could be dangerous though as the journal could grow indefinitely.
+Use it wisely!</p>
+</li>
+</ul>
+<pre><code>The default for this parameter is `10`
+</code></pre><ul>
+<li><p><code>journal-compact-percentage</code></p>
+<p>The threshold to start compacting. When less than this percentage is
+considered live data, we start compacting. Note also that compacting
+won&apos;t kick in until you have at least <code>journal-compact-min-files</code>
+data files on the journal</p>
+<p>The default for this parameter is <code>30</code></p>
+</li>
+<li><p><code>journal-datasync</code> (default: true)</p>
+<p>This will disable the use of fdatasync on journal writes.</p>
+</li>
+</ul>
+<h3 id="an-important-note-on-disabling-disk-write-cache">An important note on disabling disk write cache.</h3>
+<blockquote>
+<p><strong>Warning</strong></p>
+<p>Most disks contain hardware write caches. A write cache can increase
+the apparent performance of the disk because writes just go into the
+cache and are then lazily written to the disk later.</p>
+<p>This happens irrespective of whether you have executed a fsync() from
+the operating system or correctly synced data from inside a Java
+program!</p>
+<p>By default many systems ship with disk write cache enabled. This means
+that even after syncing from the operating system there is no
+guarantee the data has actually made it to disk, so if a failure
+occurs, critical data can be lost.</p>
+<p>Some more expensive disks have non volatile or battery backed write
+caches which won&apos;t necessarily lose data on event of failure, but you
+need to test them!</p>
+<p>If your disk does not have an expensive non volatile or battery backed
+cache and it&apos;s not part of some kind of redundant array (e.g. RAID),
+and you value your data integrity you need to make sure disk write
+cache is disabled.</p>
+<p>Be aware that disabling disk write cache can give you a nasty shock
+performance wise. If you&apos;ve been used to using disks with write cache
+enabled in their default setting, unaware that your data integrity
+could be compromised, then disabling it will give you an idea of how
+fast your disk can perform when acting really reliably.</p>
+<p>On Linux you can inspect and/or change your disk&apos;s write cache
+settings using the tools <code>hdparm</code> (for IDE disks) or <code>sdparm</code> or
+<code>sginfo</code> (for SDSI/SATA disks)</p>
+<p>On Windows you can check / change the setting by right clicking on the
+disk and clicking properties.</p>
+</blockquote>
+<h3 id="installing-aio">Installing AIO</h3>
+<p>The Java NIO journal gives great performance, but If you are running
+Apache ActiveMQ Artemis using Linux Kernel 2.6 or later, we highly recommend you use
+the <code>AIO</code> journal for the very best persistence performance.</p>
+<p>It&apos;s not possible to use the AIO journal under other operating systems
+or earlier versions of the Linux kernel.</p>
+<p>If you are running Linux kernel 2.6 or later and don&apos;t already have
+<code>libaio</code> installed, you can easily install it using the following steps:</p>
+<p>Using yum, (e.g. on Fedora or Red Hat Enterprise Linux):</p>
+<pre><code>yum install libaio
+</code></pre><p>Using aptitude, (e.g. on Ubuntu or Debian system):</p>
+<pre><code>apt-get install libaio
+</code></pre><h2 id="apache-activemq-artemis-jdbc-persistence">Apache ActiveMQ Artemis JDBC Persistence</h2>
+<p>WARNING: The Apache ActiveMQ Artemis JDBC persistence store is under development and is included for evaluation purposes.</p>
+<p>The Apache ActiveMQ Artemis JDBC persistence layer offers the ability to store broker state (Messages, Addresses and other
+application state) using a database.  N.B. Address full policy Paging (See: <a href="paging.html">The section on Paging</a>) is currently not
+supported with the JDBC persistence layer.</p>
+<p>Using the ActiveMQ Artemis File Journal is the recommended configuration as it offers higher levels of performance and is
+more mature.  The JDBC persistence layer is targeted to those users who must use a database e.g. due to internal company
+policy.</p>
+<p>ActiveMQ Artemis currently has support for a limited number of database vendors (older versions may work but mileage may
+vary):</p>
+<ol>
+<li>PostGres 9.4.x</li>
+<li>MySQL 5.7.x</li>
+<li>Apache Derby 10.11.1.1</li>
+</ol>
+<p>The JDBC store uses a JDBC connection to store messages and bindings data in records in database tables.  The data stored
+in the database tables is encoded using Apache ActiveMQ Artemis internal encodings.</p>
+<h3 id="configuring-jdbc-persistence">Configuring JDBC Persistence</h3>
+<p>To configure Apache ActiveMQ Artemis to use a database for persisting messages and bindings data you must do two things.</p>
+<ol>
+<li><p>Add the appropriate JDBC driver libraries to the Artemis runtime.  You can do this by dropping the relevant jars in the lib folder of the ActiveMQ Artemis distribution.</p>
+</li>
+<li><p>Create a store element in your broker.xml config file under the <code>&lt;core&gt;</code> element.  For example:</p>
+</li>
+</ol>
+<pre><code class="lang-xml">      <span class="hljs-tag">&lt;<span class="hljs-name">store</span>&gt;</span>
+         <span class="hljs-tag">&lt;<span class="hljs-name">database-store</span>&gt;</span>
+            <span class="hljs-tag">&lt;<span class="hljs-name">jdbc-connection-url</span>&gt;</span>jdbc:derby:data/derby/database-store;create=true<span class="hljs-tag">&lt;/<span class="hljs-name">jdbc-connection-url</span>&gt;</span>
+            <span class="hljs-tag">&lt;<span class="hljs-name">bindings-table-name</span>&gt;</span>BINDINGS_TABLE<span class="hljs-tag">&lt;/<span class="hljs-name">bindings-table-name</span>&gt;</span>
+            <span class="hljs-tag">&lt;<span class="hljs-name">message-table-name</span>&gt;</span>MESSAGE_TABLE<span class="hljs-tag">&lt;/<span class="hljs-name">message-table-name</span>&gt;</span>
+            <span class="hljs-tag">&lt;<span class="hljs-name">large-message-table-name</span>&gt;</span>LARGE_MESSAGES_TABLE<span class="hljs-tag">&lt;/<span class="hljs-name">large-message-table-name</span>&gt;</span>
+            <span class="hljs-tag">&lt;<span class="hljs-name">jdbc-driver-class-name</span>&gt;</span>org.apache.derby.jdbc.EmbeddedDriver<span class="hljs-tag">&lt;/<span class="hljs-name">jdbc-driver-class-name</span>&gt;</span>
+         <span class="hljs-tag">&lt;/<span class="hljs-name">database-store</span>&gt;</span>
+      <span class="hljs-tag">&lt;/<span class="hljs-name">store</span>&gt;</span>
+</code></pre>
+<ul>
+<li><p><code>jdbc-connection-url</code></p>
+<p>The full JDBC connection URL for your database server.  The connection url should include all configuration parameters and database name.  Note: When configuring the server using the XML configuration files please ensure to escape any illegal chars; &quot;&amp;&quot; for example, is typical in JDBC connection url and should be escaped to &quot;&amp;&quot;.</p>
+</li>
+<li><p><code>bindings-table-name</code></p>
+<p>The name of the table in which bindings data will be persisted for the ActiveMQ Artemis server.  Specifying table names allows users to share single database amongst multiple servers, without interference.</p>
+</li>
+<li><p><code>message-table-name</code></p>
+<p>The name of the table in which bindings data will be persisted for the ActiveMQ Artemis server.  Specifying table names allows users to share single database amongst multiple servers, without interference.</p>
+</li>
+<li><p><code>large-message-table-name</code></p>
+<p>The name of the table in which messages and related data will be persisted for the ActiveMQ Artemis server.  Specifying table names allows users to share single database amongst multiple servers, without interference.</p>
+</li>
+<li><p><code>jdbc-driver-class-name</code></p>
+<p>The fully qualified class name of the desired database Driver.</p>
+</li>
+</ul>
+<h2 id="configuring-apache-activemq-artemis-for-zero-persistence">Configuring Apache ActiveMQ Artemis for Zero Persistence</h2>
+<p>In some situations, zero persistence is sometimes required for a
+messaging system. Configuring Apache ActiveMQ Artemis to perform zero persistence is
+straightforward. Simply set the parameter <code>persistence-enabled</code> in
+<code>broker.xml</code> to <code>false</code>.</p>
+<p>Please note that if you set this parameter to false, then <em>zero</em>
+persistence will occur. That means no bindings data, message data, large
+message data, duplicate id caches or paging data will be persisted.</p>
+
+                                
+                                </section>
+                            
+    </div>
+    <div class="search-results">
+        <div class="has-results">
+            
+            <h1 class="search-results-title"><span class='search-results-count'></span> results matching "<span class='search-query'></span>"</h1>
+            <ul class="search-results-list"></ul>
+            
+        </div>
+        <div class="no-results">
+            
+            <h1 class="search-results-title">No results matching "<span class='search-query'></span>"</h1>
+            
+        </div>
+    </div>
+</div>
+
+                        </div>
+                    </div>
+                
+            </div>
+
+            
+                
+                <a href="filter-expressions.html" class="navigation navigation-prev " aria-label="Previous page: Filter Expressions">
+                    <i class="fa fa-angle-left"></i>
+                </a>
+                
+                
+                <a href="configuring-transports.html" class="navigation navigation-next " aria-label="Next page: Configuring Transports">
+                    <i class="fa fa-angle-right"></i>
+                </a>
+                
+            
+        
+    </div>
+
+    <script>
+        var gitbook = gitbook || [];
+        gitbook.push(function() {
+            gitbook.page.hasChanged({"page":{"title":"Persistence","level":"1.16","depth":1,"next":{"title":"Configuring Transports","level":"1.17","depth":1,"path":"configuring-transports.md","ref":"configuring-transports.md","articles":[]},"previous":{"title":"Filter Expressions","level":"1.15","depth":1,"path":"filter-expressions.md","ref":"filter-expressions.md","articles":[]},"dir":"ltr"},"config":{"plugins":[],"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":
 "styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"github":"apache/activemq-artemis","theme":"default","githubHost":"https://github.com/","pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"variables":{},"title":"ActiveMQ Artemis Documentation","links":{"home":"http://activemq.apache.org/","issues":"http://activemq.apache.org/","contribute":"http://activemq.apache.org/contributing.html"},"gitbook":"3.x.x","description":"ActiveMQ Artemis User Guide and Reference Documentation"},"file":{"path":"persistence.md","mtime":"2016-11-12T00:49:50.000Z","type":"markdown"},"gitbook":{"version":"3.1.1","time":"2016-11-12T01:00:04.718Z"},"basePath":".","book":{"language":""}});
+        });
+    </script>
+</div>
+
+        
+    <script src="gitbook/gitbook.js"></script>
+    <script src="gitbook/theme.js"></script>
+    
+        
+        <script src="gitbook/gitbook-plugin-search/search-engine.js"></script>
+        
+    
+        
+        <script src="gitbook/gitbook-plugin-search/search.js"></script>
+        
+    
+        
+        <script src="gitbook/gitbook-plugin-lunr/lunr.min.js"></script>
+        
+    
+        
+        <script src="gitbook/gitbook-plugin-lunr/search-lunr.js"></script>
+        
+    
+        
+        <script src="gitbook/gitbook-plugin-sharing/buttons.js"></script>
+        
+    
+        
+        <script src="gitbook/gitbook-plugin-fontsettings/fontsettings.js"></script>
+        
+    
+
+    </body>
+</html>
+