You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by kw...@apache.org on 2016/01/16 13:17:04 UTC

svn commit: r1724964 [9/19] - in /qpid/site/input/releases/qpid-java-trunk: java-broker/ java-broker/book/ java-broker/book/css/ java-broker/book/images/ jms-client-0-8/ jms-client-0-8/book/ jms-client-0-8/book/images/

Modified: qpid/site/input/releases/qpid-java-trunk/java-broker/book/Java-Broker-Runtime-Background-Recovery.html.in
URL: http://svn.apache.org/viewvc/qpid/site/input/releases/qpid-java-trunk/java-broker/book/Java-Broker-Runtime-Background-Recovery.html.in?rev=1724964&r1=1724963&r2=1724964&view=diff
==============================================================================
--- qpid/site/input/releases/qpid-java-trunk/java-broker/book/Java-Broker-Runtime-Background-Recovery.html.in (original)
+++ qpid/site/input/releases/qpid-java-trunk/java-broker/book/Java-Broker-Runtime-Background-Recovery.html.in Sat Jan 16 12:17:02 2016
@@ -1,4 +1,4 @@
-<div class="docbook"><div class="navheader"><table summary="Navigation header" width="100%"><tr><th align="center" colspan="3">9.7.&#160;Background Recovery</th></tr><tr><td align="left" width="20%"><a accesskey="p" href="Java-Broker-Runtime-Flow-To-Disk.html">Prev</a>&#160;</td><th align="center" width="60%">Chapter&#160;9.&#160;Runtime</th><td align="right" width="20%">&#160;<a accesskey="n" href="Java-Broker-Runtime-Message-Compression.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title"><a id="Java-Broker-Runtime-Background-Recovery"></a>9.7.&#160;Background Recovery</h2></div></div></div><p>On startup of the Broker, or restart of a Virtualhost, the Broker restores all durable
+<div class="docbook"><div class="navheader"><table summary="Navigation header" width="100%"><tr><th align="center" colspan="3">9.7.&#160;Background Recovery</th></tr><tr><td align="left" width="20%"><a accesskey="p" href="Java-Broker-Runtime-Flow-To-Disk.html">Prev</a>&#160;</td><th align="center" width="60%">Chapter&#160;9.&#160;Runtime</th><td align="right" width="20%">&#160;<a accesskey="n" href="Java-Broker-Runtime-Message-Compression.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="Java-Broker-Runtime-Background-Recovery"></a>9.7.&#160;Background Recovery</h2></div></div></div><p>On startup of the Broker, or restart of a Virtualhost, the Broker restores all durable
     queues and their messages from disk. In the Broker's default mode the Virtualhosts do not become
     active until this recovery process completes. If queues have a large number of entries, this may
     take considerable time. During this time no messaging can be performed.</p><p>The Broker has a background recovery feature allows the system to return to operation
@@ -11,4 +11,4 @@
     <code class="literal">use_async_message_store_recovery</code> at the desired Virtualhost, or at Broker or
     higher to enable the feature broker-wide.</p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>The background recovery feature does not write operational log messages to indicate its
       progress. This means messages <a class="link" href="Java-Broker-Appendix-Operation-Logging.html#Java-Broker-Appendix-Operation-Logging-Message-MST-1004">MST-1004</a> and <a class="link" href="Java-Broker-Appendix-Operation-Logging.html#Java-Broker-Appendix-Operation-Logging-Message-MST-1005">MST-1005</a> will not
-      be seen.</p></div></div><div class="navfooter"><hr /><table summary="Navigation footer" width="100%"><tr><td align="left" width="40%"><a accesskey="p" href="Java-Broker-Runtime-Flow-To-Disk.html">Prev</a>&#160;</td><td align="center" width="20%"><a accesskey="u" href="Java-Broker-Runtime.html">Up</a></td><td align="right" width="40%">&#160;<a accesskey="n" href="Java-Broker-Runtime-Message-Compression.html">Next</a></td></tr><tr><td align="left" valign="top" width="40%">9.6.&#160;Flow to Disk&#160;</td><td align="center" width="20%"><a accesskey="h" href="index.html">Home</a></td><td align="right" valign="top" width="40%">&#160;9.8.&#160;Message Compression</td></tr></table></div></div>
\ No newline at end of file
+      be seen.</p></div></div><div class="navfooter"><hr /><table summary="Navigation footer" width="100%"><tr><td align="left" width="40%"><a accesskey="p" href="Java-Broker-Runtime-Flow-To-Disk.html">Prev</a>&#160;</td><td align="center" width="20%"><a accesskey="u" href="Java-Broker-Runtime.html">Up</a></td><td align="right" width="40%">&#160;<a accesskey="n" href="Java-Broker-Runtime-Message-Compression.html">Next</a></td></tr><tr><td align="left" valign="top" width="40%">9.6.&#160;Flow to Disk&#160;</td><td align="center" width="20%"><a accesskey="h" href="AMQP-Messaging-Broker-Java-Book.html">Home</a></td><td align="right" valign="top" width="40%">&#160;9.8.&#160;Message Compression</td></tr></table></div></div>
\ No newline at end of file

Added: qpid/site/input/releases/qpid-java-trunk/java-broker/book/Java-Broker-Runtime-Close-Connection-When-No-Route.html.in
URL: http://svn.apache.org/viewvc/qpid/site/input/releases/qpid-java-trunk/java-broker/book/Java-Broker-Runtime-Close-Connection-When-No-Route.html.in?rev=1724964&view=auto
==============================================================================
--- qpid/site/input/releases/qpid-java-trunk/java-broker/book/Java-Broker-Runtime-Close-Connection-When-No-Route.html.in (added)
+++ qpid/site/input/releases/qpid-java-trunk/java-broker/book/Java-Broker-Runtime-Close-Connection-When-No-Route.html.in Sat Jan 16 12:17:02 2016
@@ -0,0 +1,30 @@
+<div class="docbook"><div class="navheader"><table summary="Navigation header" width="100%"><tr><th align="center" colspan="3">9.5.&#160;Closing client connections on unroutable mandatory messages</th></tr><tr><td align="left" width="20%"><a accesskey="p" href="Java-Broker-Runtime-Handling-Undeliverable-Messages.html">Prev</a>&#160;</td><th align="center" width="60%">Chapter&#160;9.&#160;Runtime</th><td align="right" width="20%">&#160;<a accesskey="n" href="Java-Broker-Runtime-Flow-To-Disk.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="Java-Broker-Runtime-Close-Connection-When-No-Route"></a>9.5.&#160;Closing client connections on unroutable mandatory messages</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="Java-Broker-Runtime-Close-Connection-When-No-Route-Summary"></a>9.5.1.&#160;Summary</h3></div></div></div><p>
+        Due to asynchronous nature of AMQP 0-8/0-9/0-9-1 protocols sending a message with a routing key for which no queue binding exist results
+        in either message being bounced back (if it is mandatory or immediate) or discarded on broker side otherwise.
+    </p><p>
+        When a 'mandatory' message is returned back, the Qpid JMS client conveys this by delivering
+        an <span class="emphasis"><em>AMQNoRouteException</em></span> through the configured ExceptionListener on the Connection.
+        This does not cause channel or connection closure, however it requires a special exception handling
+        on client side in order to deal with <span class="emphasis"><em>AMQNoRouteExceptions</em></span>.
+        This could potentially be a problem when using various messaging frameworks (e.g. Mule)
+        as they usually close the connection on receiving any JMSException.
+    </p><p>
+        In order to simplify application handling of scenarios where 'mandatory' messages
+        are being sent to queues which do not actually exist, the Java Broker can be configured such that
+        it will respond to this situation by closing the connection
+        rather than returning the unroutable message to the client as it normally should.
+        From the application perspective, this will result in failure of synchronous operations in progress such as a session commit() call.
+    </p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>This feature affects only transacted sessions.</p><p>
+            Qpid JMS client sends 'mandatory' messages when using Queue destinations
+            and 'non-mandatory' messages when using Topic destinations.
+        </p></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="Java-Broker-Runtime-Close-Connection-When-No-Route-Configuration"></a>9.5.2.&#160;Configuring <span class="emphasis"><em>closeWhenNoRoute</em></span></h3></div></div></div><p>
+        The Broker attribute <span class="emphasis"><em>closeWhenNoRoute</em></span> can be set to specify this feature on broker side.
+        By default, it is turned on. Setting <span class="emphasis"><em>closeWhenNoRoute</em></span> to <span class="emphasis"><em>false</em></span> switches it off.
+    </p><p>
+        Setting the <span class="emphasis"><em>closeWhenNoRoute</em></span> in the JMS client connection URL can override the broker configuration
+        on a connection specific basis, for example :
+    </p><div class="example"><a id="d0e5648"></a><p class="title"><strong>Example&#160;9.1.&#160;Disable feature to close connection on unroutable messages with client URL</strong></p><div class="example-contents"><pre class="screen">
+amqp://guest:guest@clientid/?brokerlist='tcp://localhost:5672'&amp;closeWhenNoRoute='false'</pre></div></div><br class="example-break" /><p>
+       If no value is specified on the client the broker setting will be used. If client setting is specified then it will take precedence
+       over the broker-wide configuration. If the client specifies and broker does not support this feature the warning will be logged.
+    </p></div></div><div class="navfooter"><hr /><table summary="Navigation footer" width="100%"><tr><td align="left" width="40%"><a accesskey="p" href="Java-Broker-Runtime-Handling-Undeliverable-Messages.html">Prev</a>&#160;</td><td align="center" width="20%"><a accesskey="u" href="Java-Broker-Runtime.html">Up</a></td><td align="right" width="40%">&#160;<a accesskey="n" href="Java-Broker-Runtime-Flow-To-Disk.html">Next</a></td></tr><tr><td align="left" valign="top" width="40%">9.4.&#160;Handing Undeliverable Messages&#160;</td><td align="center" width="20%"><a accesskey="h" href="AMQP-Messaging-Broker-Java-Book.html">Home</a></td><td align="right" valign="top" width="40%">&#160;9.6.&#160;Flow to Disk</td></tr></table></div></div>
\ No newline at end of file

Modified: qpid/site/input/releases/qpid-java-trunk/java-broker/book/Java-Broker-Runtime-Connection-Limit.html.in
URL: http://svn.apache.org/viewvc/qpid/site/input/releases/qpid-java-trunk/java-broker/book/Java-Broker-Runtime-Connection-Limit.html.in?rev=1724964&r1=1724963&r2=1724964&view=diff
==============================================================================
--- qpid/site/input/releases/qpid-java-trunk/java-broker/book/Java-Broker-Runtime-Connection-Limit.html.in (original)
+++ qpid/site/input/releases/qpid-java-trunk/java-broker/book/Java-Broker-Runtime-Connection-Limit.html.in Sat Jan 16 12:17:02 2016
@@ -1,24 +1,24 @@
-<div class="docbook"><div class="navheader"><table summary="Navigation header" width="100%"><tr><th align="center" colspan="3">9.9.&#160;Connection Limits</th></tr><tr><td align="left" width="20%"><a accesskey="p" href="Java-Broker-Runtime-Message-Compression.html">Prev</a>&#160;</td><th align="center" width="60%">Chapter&#160;9.&#160;Runtime</th><td align="right" width="20%">&#160;<a accesskey="n" href="Java-Broker-High-Availability.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title"><a id="Java-Broker-Runtime-Connection-Limit"></a>9.9.&#160;Connection Limits</h2></div></div></div><p>
+<div class="docbook"><div class="navheader"><table summary="Navigation header" width="100%"><tr><th align="center" colspan="3">9.9.&#160;Connection Limits</th></tr><tr><td align="left" width="20%"><a accesskey="p" href="Java-Broker-Runtime-Message-Compression.html">Prev</a>&#160;</td><th align="center" width="60%">Chapter&#160;9.&#160;Runtime</th><td align="right" width="20%">&#160;<a accesskey="n" href="Java-Broker-Runtime-Memory.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="Java-Broker-Runtime-Connection-Limit"></a>9.9.&#160;Connection Limits</h2></div></div></div><p>
      Each connection to the Broker consumes resources while it is connected. In order to protect
      the Broker against malfunctioning (or malicious) client processes, it is possible to limit the
      number of connections that can be active on any given port.
    </p><p>
        Connection limits on AMQP ports are controlled by an attribute "maxOpenConnections" on
-       the port. By default this takes the value of the context variable 
+       the port. By default this takes the value of the context variable
        <code class="literal">qpid.port.max_open_connections</code> which in itself is defaulted to the
        value <code class="literal">-1</code> meaning there is no limit.
    </p><p>
        If the interpolated value of <code class="literal">maxOpenConnections</code> on an AMQP port is a
        positive integer, then when that many active connections have been established no new
-       connections will be allowed (until an existing connection has been closed). Any such 
+       connections will be allowed (until an existing connection has been closed). Any such
        rejection of a connection will be accompanied by the operational log message
        <a class="link" href="Java-Broker-Appendix-Operation-Logging.html#Java-Broker-Appendix-Operation-Logging-Message-PRT-1005">PRT-1005</a>.
    </p><p>
-       The context variable <code class="literal">qpid.port.open_connections_warn_percent</code> can be 
+       The context variable <code class="literal">qpid.port.open_connections_warn_percent</code> can be
        used to control when a warning log message is generated as the number of open connections
-       approaches the limit for the port. The default value of this variable is 
+       approaches the limit for the port. The default value of this variable is
        <code class="literal">80</code> meaning that if more the number of open connections to the port
-       has exceeded 80% of the given limit then the operatinal log message 
+       has exceeded 80% of the given limit then the operatinal log message
        <a class="link" href="Java-Broker-Appendix-Operation-Logging.html#Java-Broker-Appendix-Operation-Logging-Message-PRT-1004">PRT-1004</a>
        will be generated.
-   </p></div><div class="navfooter"><hr /><table summary="Navigation footer" width="100%"><tr><td align="left" width="40%"><a accesskey="p" href="Java-Broker-Runtime-Message-Compression.html">Prev</a>&#160;</td><td align="center" width="20%"><a accesskey="u" href="Java-Broker-Runtime.html">Up</a></td><td align="right" width="40%">&#160;<a accesskey="n" href="Java-Broker-High-Availability.html">Next</a></td></tr><tr><td align="left" valign="top" width="40%">9.8.&#160;Message Compression&#160;</td><td align="center" width="20%"><a accesskey="h" href="index.html">Home</a></td><td align="right" valign="top" width="40%">&#160;Chapter&#160;10.&#160;High Availability</td></tr></table></div></div>
\ No newline at end of file
+   </p></div><div class="navfooter"><hr /><table summary="Navigation footer" width="100%"><tr><td align="left" width="40%"><a accesskey="p" href="Java-Broker-Runtime-Message-Compression.html">Prev</a>&#160;</td><td align="center" width="20%"><a accesskey="u" href="Java-Broker-Runtime.html">Up</a></td><td align="right" width="40%">&#160;<a accesskey="n" href="Java-Broker-Runtime-Memory.html">Next</a></td></tr><tr><td align="left" valign="top" width="40%">9.8.&#160;Message Compression&#160;</td><td align="center" width="20%"><a accesskey="h" href="AMQP-Messaging-Broker-Java-Book.html">Home</a></td><td align="right" valign="top" width="40%">&#160;9.10.&#160;Memory</td></tr></table></div></div>
\ No newline at end of file

Modified: qpid/site/input/releases/qpid-java-trunk/java-broker/book/Java-Broker-Runtime-Disk-Space-Management.html.in
URL: http://svn.apache.org/viewvc/qpid/site/input/releases/qpid-java-trunk/java-broker/book/Java-Broker-Runtime-Disk-Space-Management.html.in?rev=1724964&r1=1724963&r2=1724964&view=diff
==============================================================================
--- qpid/site/input/releases/qpid-java-trunk/java-broker/book/Java-Broker-Runtime-Disk-Space-Management.html.in (original)
+++ qpid/site/input/releases/qpid-java-trunk/java-broker/book/Java-Broker-Runtime-Disk-Space-Management.html.in Sat Jan 16 12:17:02 2016
@@ -1,8 +1,8 @@
-<div class="docbook"><div class="navheader"><table summary="Navigation header" width="100%"><tr><th align="center" colspan="3">9.2.&#160;Disk Space Management</th></tr><tr><td align="left" width="20%"><a accesskey="p" href="Java-Broker-Runtime.html">Prev</a>&#160;</td><th align="center" width="60%">Chapter&#160;9.&#160;Runtime</th><td align="right" width="20%">&#160;<a accesskey="n" href="Java-Broker-Runtime-Producer-Transaction-Timeout.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title"><a id="Java-Broker-Runtime-Disk-Space-Management"></a>9.2.&#160;Disk Space Management</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="Qpid-Producer-Flow-Control"></a>9.2.1.&#160;Producer Flow Control</h3></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="Java-Broker-Runtime-Disk-Space-Management-Producer-Flow-Control-GeneralInformation"></
 a>9.2.1.1.&#160;General Information</h4></div></div></div><p>
+<div class="docbook"><div class="navheader"><table summary="Navigation header" width="100%"><tr><th align="center" colspan="3">9.2.&#160;Disk Space Management</th></tr><tr><td align="left" width="20%"><a accesskey="p" href="Java-Broker-Runtime.html">Prev</a>&#160;</td><th align="center" width="60%">Chapter&#160;9.&#160;Runtime</th><td align="right" width="20%">&#160;<a accesskey="n" href="Java-Broker-Runtime-Producer-Transaction-Timeout.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="Java-Broker-Runtime-Disk-Space-Management"></a>9.2.&#160;Disk Space Management</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="Qpid-Producer-Flow-Control"></a>9.2.1.&#160;Producer Flow Control</h3></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="Java-Broker-Runtime-Disk-Space-Management-Producer-Flow-Control-Ge
 neralInformation"></a>9.2.1.1.&#160;General Information</h4></div></div></div><p>
             The Java Broker supports a flow control mechanism to which can be used to prevent either a single queue
-            or an entire virtualhost exceeding configured limits.  These two mechanisms are described
+            or a virtualhost exceeding configured limits.  These two mechanisms are described
             next.
-        </p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="Java-Broker-Runtime-Disk-Space-Management-Producer-Flow-Control-ServerConfiguration"></a>9.2.1.2.&#160;Server Configuration</h4></div></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="idm140601088176064"></a>Configuring a Queue to use flow control</h5></div></div></div><p>
+        </p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="Java-Broker-Runtime-Disk-Space-Management-Producer-Flow-Control-ServerConfiguration"></a>9.2.1.2.&#160;Server Configuration</h4></div></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="d0e5343"></a>Configuring a Queue to use flow control</h5></div></div></div><p>
                 Flow control is enabled on a producer when it sends a message to a Queue
                 which is "overfull". The producer flow control will be rescinded when all
                 Queues on which a producer is blocking become "underfull". A Queue is defined
@@ -12,7 +12,7 @@
             </p><p>
                 The capacity and resume capacity can be specified when the queue is created.  This
                 can be done using the Flow Control Settings within the Queue creation dialogue.
-            </p><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="idm140601088637696"></a>Broker Log Messages</h6></div></div></div><p>
+            </p><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="d0e5356"></a>Broker Log Messages</h6></div></div></div><p>
                     There are four Broker log messages that may occur if flow control through queue capacity limits is enabled.
                     Firstly, when a capacity limited queue becomes overfull, a log message similar to the following is produced
                 </p><pre class="programlisting">
@@ -23,7 +23,7 @@ MESSAGE [con:2(guest@anonymous(713889609
 MESSAGE [vh(/test)/qu(MyQueue)] [vh(/test)/qu(MyQueue)] QUE-1004 : Underfull : Size : 600 bytes, Resume Capacity : 800
                 </pre><p>And for every channel which becomes unblocked you will see a message similar to: </p><pre class="programlisting">
 MESSAGE [con:2(guest@anonymous(713889609)/test)/ch:1] [con:2(guest@anonymous(713889609)/test)/ch:1] CHN-1006 : Flow Control Removed
-                </pre><p>Obviously the details of connection, virtual host, queue, size, capacity, etc would depend on the configuration in use.</p></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="idm140601093459088"></a>Disk quota-based flow control</h5></div></div></div><p>
+                </pre><p>Obviously the details of connection, virtual host, queue, size, capacity, etc would depend on the configuration in use.</p></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="d0e5379"></a>Disk quota-based flow control</h5></div></div></div><p>
                 Flow control can also be triggered when a configured disk quota is exceeded. This is supported by the BDB and
                 Derby virtualhosts.
             </p><p>
@@ -46,7 +46,11 @@ MESSAGE [con:2(guest@anonymous(713889609
                 cannot guarantee that the disk space limit will not be exceeded. If several concurrent
                 transactions are started before the limit is reached, which collectively cause the limit
                 to be exceeded, the broker may allow all of them to be committed.
-            </p><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="idm140601091179152"></a>Broker Log Messages for quota flow control</h6></div></div></div><p>
+            </p><p>
+                The Broker will also impose flow control if the filesystem hosting a virtualhost
+                exceeds a <a class="link" href="Java-Broker-Management-Managing-Broker.html#Java-Broker-Management-Managing-Broker-Context-StoreFilesystemMaxUsagePercent">
+                    configured percentage.</a>.
+            </p><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="d0e5401"></a>Broker Log Messages for quota flow control</h6></div></div></div><p>
                     There are two broker log messages that may occur if flow control through disk quota limits is enabled.
                     When the virtual host is blocked due to exceeding of the disk quota limit the following message
                     appears in the broker log
@@ -89,4 +93,4 @@ WARN   Message send delayed by 10s due t
         </p><pre class="programlisting">
 -Dqpid.flow_control_wait_failure=60000
 -Dqpid.flow_control_wait_notify_period=10000
-        </pre></div></div></div><div class="navfooter"><hr /><table summary="Navigation footer" width="100%"><tr><td align="left" width="40%"><a accesskey="p" href="Java-Broker-Runtime.html">Prev</a>&#160;</td><td align="center" width="20%"><a accesskey="u" href="Java-Broker-Runtime.html">Up</a></td><td align="right" width="40%">&#160;<a accesskey="n" href="Java-Broker-Runtime-Producer-Transaction-Timeout.html">Next</a></td></tr><tr><td align="left" valign="top" width="40%">Chapter&#160;9.&#160;Runtime&#160;</td><td align="center" width="20%"><a accesskey="h" href="index.html">Home</a></td><td align="right" valign="top" width="40%">&#160;9.3.&#160;Producer Transaction Timeout</td></tr></table></div></div>
\ No newline at end of file
+        </pre></div></div></div><div class="navfooter"><hr /><table summary="Navigation footer" width="100%"><tr><td align="left" width="40%"><a accesskey="p" href="Java-Broker-Runtime.html">Prev</a>&#160;</td><td align="center" width="20%"><a accesskey="u" href="Java-Broker-Runtime.html">Up</a></td><td align="right" width="40%">&#160;<a accesskey="n" href="Java-Broker-Runtime-Producer-Transaction-Timeout.html">Next</a></td></tr><tr><td align="left" valign="top" width="40%">Chapter&#160;9.&#160;Runtime&#160;</td><td align="center" width="20%"><a accesskey="h" href="AMQP-Messaging-Broker-Java-Book.html">Home</a></td><td align="right" valign="top" width="40%">&#160;9.3.&#160;Producer Transaction Timeout</td></tr></table></div></div>
\ No newline at end of file

Modified: qpid/site/input/releases/qpid-java-trunk/java-broker/book/Java-Broker-Runtime-Flow-To-Disk.html.in
URL: http://svn.apache.org/viewvc/qpid/site/input/releases/qpid-java-trunk/java-broker/book/Java-Broker-Runtime-Flow-To-Disk.html.in?rev=1724964&r1=1724963&r2=1724964&view=diff
==============================================================================
--- qpid/site/input/releases/qpid-java-trunk/java-broker/book/Java-Broker-Runtime-Flow-To-Disk.html.in (original)
+++ qpid/site/input/releases/qpid-java-trunk/java-broker/book/Java-Broker-Runtime-Flow-To-Disk.html.in Sat Jan 16 12:17:02 2016
@@ -1,15 +1,16 @@
-<div class="docbook"><div class="navheader"><table summary="Navigation header" width="100%"><tr><th align="center" colspan="3">9.6.&#160;Flow to Disk</th></tr><tr><td align="left" width="20%"><a accesskey="p" href="Java-Broker-Close-Connection-When-No-Route.html">Prev</a>&#160;</td><th align="center" width="60%">Chapter&#160;9.&#160;Runtime</th><td align="right" width="20%">&#160;<a accesskey="n" href="Java-Broker-Runtime-Background-Recovery.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title"><a id="Java-Broker-Runtime-Flow-To-Disk"></a>9.6.&#160;Flow to Disk</h2></div></div></div><p>Flow to disk limits the amount of heap memory that can be occupied by messages. Once this
+<div class="docbook"><div class="navheader"><table summary="Navigation header" width="100%"><tr><th align="center" colspan="3">9.6.&#160;Flow to Disk</th></tr><tr><td align="left" width="20%"><a accesskey="p" href="Java-Broker-Runtime-Close-Connection-When-No-Route.html">Prev</a>&#160;</td><th align="center" width="60%">Chapter&#160;9.&#160;Runtime</th><td align="right" width="20%">&#160;<a accesskey="n" href="Java-Broker-Runtime-Background-Recovery.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="Java-Broker-Runtime-Flow-To-Disk"></a>9.6.&#160;Flow to Disk</h2></div></div></div><p>Flow to disk limits the amount of <a class="link" href="Java-Broker-Runtime-Memory.html" title="9.10.&#160;Memory">direct and heap memory</a>
+    that can be occupied by messages. Once this
     limit is reached any new transient messages and all existing transient messages will be
     transferred to disk. Newly arriving transient messages will continue to go to the disk until the
-    cumulative size of all messages falls below the limit once again.</p><p>By default the Broker makes 40% of the max available memory for messages. This memory is
+    cumulative size of all messages falls below the limit once again.</p><p>By default the Broker makes 40% of the max direct available memory for messages. This memory is
     divided between all the queues across all virtual hosts defined on the Broker with a percentage
     calculated according to their current queue size. These calculations are refreshed periodically
     by the housekeeping cycle.</p><p>For example if there are two queues, one containing 75MB and the second 100MB messages
-    respectively and the Broker has 1GB heap memory with the default of 40% available for messages.
+    respectively and the Broker has 1GB direct memory with the default of 40% available for messages.
     The first queue will have a target size of 170MB and the second 230MB. Once 400MB is taken by
     messages, messages will begin to flow to disk. New messages will cease to flow to disk when
     their cumulative size falls beneath 400MB.</p><p>Flow to disk is configured by Broker context variable
       <code class="literal">broker.flowToDiskThreshold</code>. It is expressed as a size in bytes and defaults
     to 40% of the JVM maximum heap size.</p><p>Log message <a class="link" href="Java-Broker-Appendix-Operation-Logging.html#Java-Broker-Appendix-Operation-Logging-Message-BRK-1014">BRK-1014</a> is written when the feature activates. Once the total space of all messages
     decreases below the threshold, the message <a class="link" href="Java-Broker-Appendix-Operation-Logging.html#Java-Broker-Appendix-Operation-Logging-Message-BRK-1015">BRK-1015</a> is written
-    to show that the feature is no longer active.</p></div><div class="navfooter"><hr /><table summary="Navigation footer" width="100%"><tr><td align="left" width="40%"><a accesskey="p" href="Java-Broker-Close-Connection-When-No-Route.html">Prev</a>&#160;</td><td align="center" width="20%"><a accesskey="u" href="Java-Broker-Runtime.html">Up</a></td><td align="right" width="40%">&#160;<a accesskey="n" href="Java-Broker-Runtime-Background-Recovery.html">Next</a></td></tr><tr><td align="left" valign="top" width="40%">9.5.&#160;Closing client connections on unroutable mandatory messages&#160;</td><td align="center" width="20%"><a accesskey="h" href="index.html">Home</a></td><td align="right" valign="top" width="40%">&#160;9.7.&#160;Background Recovery</td></tr></table></div></div>
\ No newline at end of file
+    to show that the feature is no longer active.</p></div><div class="navfooter"><hr /><table summary="Navigation footer" width="100%"><tr><td align="left" width="40%"><a accesskey="p" href="Java-Broker-Runtime-Close-Connection-When-No-Route.html">Prev</a>&#160;</td><td align="center" width="20%"><a accesskey="u" href="Java-Broker-Runtime.html">Up</a></td><td align="right" width="40%">&#160;<a accesskey="n" href="Java-Broker-Runtime-Background-Recovery.html">Next</a></td></tr><tr><td align="left" valign="top" width="40%">9.5.&#160;Closing client connections on unroutable mandatory messages&#160;</td><td align="center" width="20%"><a accesskey="h" href="AMQP-Messaging-Broker-Java-Book.html">Home</a></td><td align="right" valign="top" width="40%">&#160;9.7.&#160;Background Recovery</td></tr></table></div></div>
\ No newline at end of file

Modified: qpid/site/input/releases/qpid-java-trunk/java-broker/book/Java-Broker-Runtime-Handling-Undeliverable-Messages.html.in
URL: http://svn.apache.org/viewvc/qpid/site/input/releases/qpid-java-trunk/java-broker/book/Java-Broker-Runtime-Handling-Undeliverable-Messages.html.in?rev=1724964&r1=1724963&r2=1724964&view=diff
==============================================================================
--- qpid/site/input/releases/qpid-java-trunk/java-broker/book/Java-Broker-Runtime-Handling-Undeliverable-Messages.html.in (original)
+++ qpid/site/input/releases/qpid-java-trunk/java-broker/book/Java-Broker-Runtime-Handling-Undeliverable-Messages.html.in Sat Jan 16 12:17:02 2016
@@ -1,4 +1,4 @@
-<div class="docbook"><div class="navheader"><table summary="Navigation header" width="100%"><tr><th align="center" colspan="3">9.4.&#160;Handing Undeliverable Messages</th></tr><tr><td align="left" width="20%"><a accesskey="p" href="Java-Broker-Runtime-Producer-Transaction-Timeout.html">Prev</a>&#160;</td><th align="center" width="60%">Chapter&#160;9.&#160;Runtime</th><td align="right" width="20%">&#160;<a accesskey="n" href="Java-Broker-Close-Connection-When-No-Route.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title"><a id="Java-Broker-Runtime-Handling-Undeliverable-Messages"></a>9.4.&#160;Handing Undeliverable Messages</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="Java-Broker-Runtime-Handling-Undeliverable-Messages-Introduction"></a>9.4.1.&#160;Introduction</h3></div></div></div><p> Messages that cannot be delivered successfully to a consumer (for instance, becau
 se the
+<div class="docbook"><div class="navheader"><table summary="Navigation header" width="100%"><tr><th align="center" colspan="3">9.4.&#160;Handing Undeliverable Messages</th></tr><tr><td align="left" width="20%"><a accesskey="p" href="Java-Broker-Runtime-Producer-Transaction-Timeout.html">Prev</a>&#160;</td><th align="center" width="60%">Chapter&#160;9.&#160;Runtime</th><td align="right" width="20%">&#160;<a accesskey="n" href="Java-Broker-Runtime-Close-Connection-When-No-Route.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="Java-Broker-Runtime-Handling-Undeliverable-Messages"></a>9.4.&#160;Handing Undeliverable Messages</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="Java-Broker-Runtime-Handling-Undeliverable-Messages-Introduction"></a>9.4.1.&#160;Introduction</h3></div></div></div><p> Messages that cannot be delivered successfully to a c
 onsumer (for instance, because the
    client is using a transacted session and rolls-back the transaction) can be made available on
    the queue again and then subsequently be redelivered, depending on the precise session
    acknowledgement mode and messaging model used by the application. This is normally desirable
@@ -15,7 +15,7 @@
    described in the following sections.</p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="Java-Broker-Runtime-Handling-Undeliverable-Messages-Maximum-Delivery-Count"></a>9.4.2.&#160;Maximum Delivery Count</h3></div></div></div><p> Maximum delivery count is a property of a queue. If a consumer application is unable to
    process a message more than the specified number of times, then the broker will either route the
    message to a dead-letter queue (if one has been defined), or will discard the message. </p><p> In order for a maximum delivery count to be enforced, the consuming client
-    <span class="emphasis"><em>must</em></span> call <a class="ulink" href="http://docs.oracle.com/javaee/6/api/javax/jms/Session.html#rollback()" target="_top">Session#rollback()</a> (or <a class="ulink" href="http://docs.oracle.com/javaee/6/api/javax/jms/Session.html#recover()" target="_top">Session#recover()</a> if the session is not transacted). It is during the Broker's
+    <span class="emphasis"><em>must</em></span> call <a class="link" href="http://docs.oracle.com/javaee/6/api/javax/jms/Session.html#rollback()" target="_top">Session#rollback()</a> (or <a class="link" href="http://docs.oracle.com/javaee/6/api/javax/jms/Session.html#recover()" target="_top">Session#recover()</a> if the session is not transacted). It is during the Broker's
    processing of Session#rollback() (or Session#recover()) that if a message has been seen
    at least the maximum number of times then it will move the message to the DLQ or discard the
    message.</p><p>If the consuming client fails in another manner, for instance, closes the connection, the
@@ -36,4 +36,4 @@
     examination of messages arriving on DLQs so that both corrective actions can be taken to resolve
     the underlying cause and organise for their timely removal from the DLQ. Messages on DLQs
     consume system resources in the same manner as messages on normal queues so excessive queue
-    depths should not be permitted to develop.</p></div></div></div><div class="navfooter"><hr /><table summary="Navigation footer" width="100%"><tr><td align="left" width="40%"><a accesskey="p" href="Java-Broker-Runtime-Producer-Transaction-Timeout.html">Prev</a>&#160;</td><td align="center" width="20%"><a accesskey="u" href="Java-Broker-Runtime.html">Up</a></td><td align="right" width="40%">&#160;<a accesskey="n" href="Java-Broker-Close-Connection-When-No-Route.html">Next</a></td></tr><tr><td align="left" valign="top" width="40%">9.3.&#160;Producer Transaction Timeout&#160;</td><td align="center" width="20%"><a accesskey="h" href="index.html">Home</a></td><td align="right" valign="top" width="40%">&#160;9.5.&#160;Closing client connections on unroutable mandatory messages</td></tr></table></div></div>
\ No newline at end of file
+    depths should not be permitted to develop.</p></div></div></div><div class="navfooter"><hr /><table summary="Navigation footer" width="100%"><tr><td align="left" width="40%"><a accesskey="p" href="Java-Broker-Runtime-Producer-Transaction-Timeout.html">Prev</a>&#160;</td><td align="center" width="20%"><a accesskey="u" href="Java-Broker-Runtime.html">Up</a></td><td align="right" width="40%">&#160;<a accesskey="n" href="Java-Broker-Runtime-Close-Connection-When-No-Route.html">Next</a></td></tr><tr><td align="left" valign="top" width="40%">9.3.&#160;Producer Transaction Timeout&#160;</td><td align="center" width="20%"><a accesskey="h" href="AMQP-Messaging-Broker-Java-Book.html">Home</a></td><td align="right" valign="top" width="40%">&#160;9.5.&#160;Closing client connections on unroutable mandatory messages</td></tr></table></div></div>
\ No newline at end of file

Added: qpid/site/input/releases/qpid-java-trunk/java-broker/book/Java-Broker-Runtime-Memory.html.in
URL: http://svn.apache.org/viewvc/qpid/site/input/releases/qpid-java-trunk/java-broker/book/Java-Broker-Runtime-Memory.html.in?rev=1724964&view=auto
==============================================================================
--- qpid/site/input/releases/qpid-java-trunk/java-broker/book/Java-Broker-Runtime-Memory.html.in (added)
+++ qpid/site/input/releases/qpid-java-trunk/java-broker/book/Java-Broker-Runtime-Memory.html.in Sat Jan 16 12:17:02 2016
@@ -0,0 +1,123 @@
+<div class="docbook"><div class="navheader"><table summary="Navigation header" width="100%"><tr><th align="center" colspan="3">9.10.&#160;Memory</th></tr><tr><td align="left" width="20%"><a accesskey="p" href="Java-Broker-Runtime-Connection-Limit.html">Prev</a>&#160;</td><th align="center" width="60%">Chapter&#160;9.&#160;Runtime</th><td align="right" width="20%">&#160;<a accesskey="n" href="Java-Broker-High-Availability.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="Java-Broker-Runtime-Memory"></a>9.10.&#160;Memory</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="Java-Broker-Runtime-Memory-Introduction"></a>9.10.1.&#160;Introduction</h3></div></div></div><p>
+      Understanding how the Qpid broker uses memory is essential to running a high performing and reliable service.
+      A wrongly configured broker can exhibit poor performance or even crash with an <code class="literal">OutOfMemoryError</code>.
+      Unfortunately, memory usage is not a simple topic and thus requires some in depth explanations.
+      This page should give the required background information to make informed decisions on how to configure your broker.
+    </p><p>
+      <a class="xref" href="Java-Broker-Runtime-Memory.html#Java-Broker-Runtime-Memory-Types" title="9.10.2.&#160;Types of Memory">Section&#160;9.10.2, &#8220;Types of Memory&#8221;</a> explains the two different kinds of Java memory most relevant to the broker.
+      <a class="xref" href="Java-Broker-Runtime-Memory.html#Java-Broker-Runtime-Memory-Usage" title="9.10.3.&#160;Memory Usage in the Broker">Section&#160;9.10.3, &#8220;Memory Usage in the Broker&#8221;</a> goes on to explain which parts of the broker use what kind of memory.
+      <a class="xref" href="Java-Broker-Runtime-Memory.html#Java-Broker-Runtime-Memory-Low-Memory" title="9.10.4.&#160;Low Memory Conditions">Section&#160;9.10.4, &#8220;Low Memory Conditions&#8221;</a> explains what happens when the system runs low on memory.
+      <a class="xref" href="Java-Broker-Runtime-Memory.html#Java-Broker-Runtime-Memory-Defaults" title="9.10.5.&#160;Defaults">Section&#160;9.10.5, &#8220;Defaults&#8221;</a> lays out the default settings of the Qpid broker.
+      Finally, <a class="xref" href="Java-Broker-Runtime-Memory.html#Java-Broker-Runtime-Memory-Tuning" title="9.10.6.&#160;Memory Tuning the Broker">Section&#160;9.10.6, &#8220;Memory Tuning the Broker&#8221;</a> gives some advice on tuning your broker.
+    </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="Java-Broker-Runtime-Memory-Types"></a>9.10.2.&#160;Types of Memory</h3></div></div></div><p>
+      While Java has a couple of different internal memory types we will focus on the two types that are relevant to the Qpid broker.
+      Both of these memory types are taken from the same physical memory (RAM).
+    </p><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="d0e5806"></a>9.10.2.1.&#160;Heap</h4></div></div></div><p>
+        Normally, all objects are allocated from Java's heap memory.
+        Once, nothing references an object it is cleaned up by the Java Garbage Collector and it's memory returned to the heap.
+        This works fine for most use cases.
+        However, when interacting with other parts of the operating system using Java's heap is not ideal.
+        This is where the so called direct memory comes into play.
+      </p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="d0e5811"></a>9.10.2.2.&#160;Direct</h4></div></div></div><p>
+        The world ouside of the JVM, in particular the operating system (OS), does not know about Java heap memory and uses other structures like C arrays.
+        In order to interact with these systems Java needs to copy data between its own heap memory and these native structures.
+        This can become a bottle neck when there is a lot of exchange between Java and the OS like in I/O (both disk and network) heavy applications.
+        Java's solution to this is to allow programmers to request <code class="literal">ByteBuffer</code>s from so called direct memory.
+        This is an opaque structure that <span class="emphasis"><em>might</em></span> have an underlying implementation that makes it efficient to interact with the OS.
+        Unfortunately, the GC is not good at tracking direct memory and in general it is inadvisable to use direct memory for regular objects.
+      </p></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="Java-Broker-Runtime-Memory-Usage"></a>9.10.3.&#160;Memory Usage in the Broker</h3></div></div></div><p>
+      This section lists some note worthy users of memory within the broker and where possible lists their usage of heap and direct memory.
+      Note that to ensure smooth performance some heap memory should remain unused by the application and be reserved for the JVM to do house keeping and garbage collection.
+      <a class="link" href="https://docs.oracle.com/cd/E17277_02/html/java/com/sleepycat/je/util/DbCacheSize.html" target="_top">Some guides</a> advise to reserve up to 30% of heap memory for the JVM.
+    </p><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="d0e5830"></a>9.10.3.1.&#160;Broker</h4></div></div></div><p>
+        The broker itself uses a moderate amount of heap memory (&#8776;15 MB).
+        However, each connection and session comes with a heap overhead of about 17 kB and 15 kB respectively.
+        In addition, each connection reserves 512 kB direct memory for network I/O.
+      </p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="d0e5835"></a>9.10.3.2.&#160;Virtual Hosts</h4></div></div></div><p>
+        The amount of memory a Virtual Host uses depends on its type.
+        For a JSON Virtual Host Node with a BDB Virtual Host the heap memory usage is approximately 2 MB.
+        However, each BDB Virtual Hosts has a mandatory cache in heap memory which has an impact on performance.
+        See <a class="link" href="Java-Broker-Runtime-Memory.html#Java-Broker-Runtime-Memory-Usage-BDB" title="9.10.3.4.&#160;Message Store">below</a> for more information.
+      </p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="d0e5843"></a>9.10.3.3.&#160;Messages</h4></div></div></div><p>
+        Messages and their headers are kept in direct memory and have an additional overhead of approximately 1 kB heap memory each.
+        This means that most brokers will want to have more direct memory than heap memory.
+        When many small messages accumulate on the broker the 1 kB heap memory overhead can become a <a class="link" href="Java-Broker-Runtime-Memory.html#Java-Broker-Runtime-Memory-Low-Memory-Heap" title="9.10.4.1.&#160;Low on Heap Memory">limiting factor</a>.
+      </p><p>
+        When the broker is <a class="link" href="Java-Broker-Runtime-Memory.html#Java-Broker-Runtime-Memory-Low-Memory-Direct" title="9.10.4.2.&#160;Low on Direct Memory">running low on direct memory</a>
+        it will evict messages from memory and <a class="link" href="Java-Broker-Runtime-Flow-To-Disk.html" title="9.6.&#160;Flow to Disk">flow them to disk</a>.
+        For persistent messages this only means freeing the direct memory representation because they always have an on-disk representation to guard against unexpected failure (e.g., a power cut).
+        For transient messages this implies additional disk I/O.
+        After being flown to disk messages need to be re-read from disk before delivery.
+      </p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="Java-Broker-Runtime-Memory-Usage-BDB"></a>9.10.3.4.&#160;Message Store</h4></div></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="d0e5862"></a>Berkeley DB (BDB)</h5></div></div></div><p>
+          The broker can use Oracle's BDB JE (BDB) as a message store to persist messages by writing them to a database.
+          BDB uses a mandatory cache for navigating and organising its database structure.
+          Sizing and tuning this cache is a topic of its own and would go beyond the scope of this guide.
+          Suffice to say that by default Qpid uses 5% of heap memory for BDB caches (each Virtual Host uses a separate cache) or 10 MB per BDB store, whichever is greater.
+          See the <a class="link" href="http://www.oracle.com/us/products/database/berkeley-db/je" target="_top">official webpage</a> especially <a class="link" href="http://docs.oracle.com/cd/E17277_02/html/java/com/sleepycat/je/util/DbCacheSize.html" target="_top">this page</a> for more information.
+          For those interested, Qpid uses <a class="link" href="http://docs.oracle.com/cd/E17277_02/html/java/com/sleepycat/je/CacheMode.html#EVICT_LN" target="_top">EVICT_LN</a> as its default JE cacheMode.
+        </p><p>
+          Note that due to licensing concerns Qpid does not ship the BDB JE jar files.
+        </p></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="d0e5878"></a>Derby</h5></div></div></div><p>
+          TODO
+        </p></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="d0e5883"></a>9.10.3.5.&#160;HTTP Management</h4></div></div></div><p>
+        Qpid uses Jetty for the HTTP Management (both REST and Web Management Console).
+        When the management plugin is loaded it will allocate the memory it needs and should not require more memory during operation and can thus be largely ignored.
+      </p></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="Java-Broker-Runtime-Memory-Low-Memory"></a>9.10.4.&#160;Low Memory Conditions</h3></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="Java-Broker-Runtime-Memory-Low-Memory-Heap"></a>9.10.4.1.&#160;Low on Heap Memory</h4></div></div></div><p>
+        When the broker runs low on heap memory performance will degrade because the JVM will trigger full garbage collection (GC) events in a struggle to free memory.
+        These full GC events are also called stop-the-world events as they completely halt the execution of the Java application.
+        Stop-the-world-events may take any where from a couple of milliseconds up to several minutes.
+        Should the heap memory demands rise even further the JVM will eventually throw an OutOfMemoryError which will cause the broker to shut down.
+      </p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="Java-Broker-Runtime-Memory-Low-Memory-Direct"></a>9.10.4.2.&#160;Low on Direct Memory</h4></div></div></div><p>
+        When the broker detects that it uses 40% of available direct memory it will start flowing incoming transient messages to disk and reading them back before delivery.
+        This will prevent the broker from running out of direct memory but may degrade performance by requiring disk I/O.
+      </p></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="Java-Broker-Runtime-Memory-Defaults"></a>9.10.5.&#160;Defaults</h3></div></div></div><p>
+      By default Qpid uses these settiongs:
+      </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+          0.5 GB heap memory
+        </li><li class="listitem">
+          1.5 GB direct memory
+        </li><li class="listitem">
+          5% of heap reserved for the JE cache.
+        </li><li class="listitem">
+          Start flow-to-disk at 40% direct memory utilisation.
+        </li></ul></div><p>
+      As an example, this would accomodate a broker with 50 connections, each serving 5 sessions, and each session having 1000 messages of 1 kB on queues in the broker.
+      This means a total of 250 concurrent sessions and a total of 250000 messages without flowing messages to disk.
+    </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="Java-Broker-Runtime-Memory-Tuning"></a>9.10.6.&#160;Memory Tuning the Broker</h3></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="d0e5919"></a>9.10.6.1.&#160;Java Tuning</h4></div></div></div><p>
+        Most of these options are implementation specific. It is assumed you are using Oracle Java 1.7 and Qpid v6.
+        </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+            Heap and direct memory can be configured through the <a class="link" href="Java-Broker-Appendix-Environment-Variables.html#Java-Broker-Appendix-Environment-Variables-Qpid-Java-Mem"><code class="literal">QPID_JAVA_MEM</code> environment variable</a>.
+          </li></ul></div><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="d0e5933"></a>9.10.6.2.&#160;Qpid Tuning</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+          The system property <code class="literal">qpid.broker.bdbTotalCacheSize</code> sets the total amount of heap memory (in bytes) allocated to BDB caches.
+        </li><li class="listitem">
+          The system property <code class="literal">broker.flowToDiskThreshold</code> sets the threshold (in bytes) for flowing transient messages to disk.
+          Should the broker use more than direct memory it will flow incoming messages to disk.
+          Should utilisation fall beneath the threshold it will stop flowing messages to disk.
+        </li></ul></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="d0e5947"></a>9.10.6.3.&#160;Formulas</h4></div></div></div><p>
+        We developed a simple formula which estimates the <span class="emphasis"><em>minimum</em></span> memory usage of the broker under certain usage.
+        These are rough estimate so we strongly recommend testing your configuration extensively.
+        Also, if your machine has more memory available by all means use more memory as it can only improve the performance and stability of your broker.
+        However, remember that both heap and direct memory are served from your computer's physical memory so their sum should never exceed the physically available RAM (minus what other processes use).
+      </p><p>
+        <span class="mathphrase">
+          memory<sub>heap</sub> = 15 MB + 15 kB * N<sub>sessions</sub> + 1 kB * N<sub>messages</sub> + 17 kB * N<sub>connections</sub>
+        </span>
+        <span class="mathphrase">
+          memory<sub>direct</sub> = 2 MB + (200 B + averageSize<sub>msg</sub> *2)*  N<sub>messages</sub> + 512 kB * N<sub>connections</sub>
+        </span>
+        Where <span class="mathphrase">N</span> denotes the total number of connections/sessions/messages on the broker. Furthermore, for direct memory only the messages that have not been flown to disk are relevant.
+      </p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="d0e5990"></a>9.10.6.4.&#160;Things to Consider</h4></div></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="d0e5993"></a>Performance</h5></div></div></div><p>
+          Choosing a smaller direct memory size will lower the threshold for flowing transient messages to disk when messages accumulate on a queue.
+          This can have impact on performance in the transient case where otherwise no disk I/O would be involved.
+        </p><p>
+          Having to little heap memory will result in poor performance due to frequent garbage collection events. See <a class="xref" href="Java-Broker-Runtime-Memory.html#Java-Broker-Runtime-Memory-Low-Memory" title="9.10.4.&#160;Low Memory Conditions">Section&#160;9.10.4, &#8220;Low Memory Conditions&#8221;</a> for more details.
+        </p></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="d0e6002"></a>OutOfMemoryError</h5></div></div></div><p>
+          Choosing too low heap memory can cause an OutOfMemoryError which will force the broker to shut down.
+          In this sense the available heap memory puts a hard limit on the number of messages you can have in the broker at the same time.
+        </p><p>
+          If the Java runs out of direct memory it also throws a OutOfMemoryError resulting the a broker shutdown.
+          Under normal circumstances this should not happen but needs to be considered when deviating from the default configuration, especially when changing the flowToDiskThreshold.
+        </p><p>
+          If you are sending very large messages you should accommodate for this by making sure you have enough direct memory.
+        </p></div></div></div></div><div class="navfooter"><hr /><table summary="Navigation footer" width="100%"><tr><td align="left" width="40%"><a accesskey="p" href="Java-Broker-Runtime-Connection-Limit.html">Prev</a>&#160;</td><td align="center" width="20%"><a accesskey="u" href="Java-Broker-Runtime.html">Up</a></td><td align="right" width="40%">&#160;<a accesskey="n" href="Java-Broker-High-Availability.html">Next</a></td></tr><tr><td align="left" valign="top" width="40%">9.9.&#160;Connection Limits&#160;</td><td align="center" width="20%"><a accesskey="h" href="AMQP-Messaging-Broker-Java-Book.html">Home</a></td><td align="right" valign="top" width="40%">&#160;Chapter&#160;10.&#160;High Availability</td></tr></table></div></div>
\ No newline at end of file

Modified: qpid/site/input/releases/qpid-java-trunk/java-broker/book/Java-Broker-Runtime-Message-Compression.html.in
URL: http://svn.apache.org/viewvc/qpid/site/input/releases/qpid-java-trunk/java-broker/book/Java-Broker-Runtime-Message-Compression.html.in?rev=1724964&r1=1724963&r2=1724964&view=diff
==============================================================================
--- qpid/site/input/releases/qpid-java-trunk/java-broker/book/Java-Broker-Runtime-Message-Compression.html.in (original)
+++ qpid/site/input/releases/qpid-java-trunk/java-broker/book/Java-Broker-Runtime-Message-Compression.html.in Sat Jan 16 12:17:02 2016
@@ -1,4 +1,4 @@
-<div class="docbook"><div class="navheader"><table summary="Navigation header" width="100%"><tr><th align="center" colspan="3">9.8.&#160;Message Compression</th></tr><tr><td align="left" width="20%"><a accesskey="p" href="Java-Broker-Runtime-Background-Recovery.html">Prev</a>&#160;</td><th align="center" width="60%">Chapter&#160;9.&#160;Runtime</th><td align="right" width="20%">&#160;<a accesskey="n" href="Java-Broker-Runtime-Connection-Limit.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title"><a id="Java-Broker-Runtime-Message-Compression"></a>9.8.&#160;Message Compression</h2></div></div></div><p>The Java Broker supports<a class="footnote" href="#ftn.idm140601090063008" id="idm140601090063008"><sup class="footnote">[12]</sup></a> message compression. This feature works in co-operation with Qpid
+<div class="docbook"><div class="navheader"><table summary="Navigation header" width="100%"><tr><th align="center" colspan="3">9.8.&#160;Message Compression</th></tr><tr><td align="left" width="20%"><a accesskey="p" href="Java-Broker-Runtime-Background-Recovery.html">Prev</a>&#160;</td><th align="center" width="60%">Chapter&#160;9.&#160;Runtime</th><td align="right" width="20%">&#160;<a accesskey="n" href="Java-Broker-Runtime-Connection-Limit.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="Java-Broker-Runtime-Message-Compression"></a>9.8.&#160;Message Compression</h2></div></div></div><p>The Java Broker supports<a class="footnote" href="#ftn.d0e5714" id="d0e5714"><sup class="footnote">[13]</sup></a> message compression. This feature works in co-operation with Qpid
   Clients implementing the same feature.</p><p>Once the feature is enabled (using Broker context variable
    <span class="emphasis"><em>broker.messageCompressionEnabled</em></span>), the Broker will advertise support for the
   message compression feature to the client at connection time. This allows clients to opt to turn
@@ -6,10 +6,10 @@
   do not, it will internally, on-the-fly, decompress compressed messages when sending to clients
   without support and conversely, compress uncomressed messages when sending to clients who do.</p><p>The Broker has a threshold below which it will not consider compressing a message, this is
   controlled by Broker content variable
-   (<code class="literal">connection.messageCompressionThresholdSize</code>) and expresses a size in bytes.</p><p>This feature <span class="emphasis"><em>may</em></span> have a beneficial effect on performance by:</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Reducing the number of bytes transmitted over the wire, both between Client and Broker, and
+   (<code class="literal">connection.messageCompressionThresholdSize</code>) and expresses a size in bytes.</p><p>This feature <span class="emphasis"><em>may</em></span> have a beneficial effect on performance by:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>Reducing the number of bytes transmitted over the wire, both between Client and Broker, and
     in the HA case, Broker to Broker, for replication purposes.</p></li><li class="listitem"><p>Reducing storage space when data is at rest within the Broker, both on disk and in
     memory.</p></li></ul></div><p>Of course, compression and decompression is computationally expensive. Turning on the feature
   may have a negative impact on CPU utilization on Broker and/or Client. Also for small messages
   payloads, message compression may increase the message size. It is recommended to test the feature
-  with representative data.</p><div class="footnotes"><br /><hr align="left" width="100" /><div class="footnote" id="ftn.idm140601090063008"><p><a class="para" href="#idm140601090063008"><sup class="para">[12] </sup></a>Message compression is not yet supported for the 1.0
-    protocol.</p></div></div></div><div class="navfooter"><hr /><table summary="Navigation footer" width="100%"><tr><td align="left" width="40%"><a accesskey="p" href="Java-Broker-Runtime-Background-Recovery.html">Prev</a>&#160;</td><td align="center" width="20%"><a accesskey="u" href="Java-Broker-Runtime.html">Up</a></td><td align="right" width="40%">&#160;<a accesskey="n" href="Java-Broker-Runtime-Connection-Limit.html">Next</a></td></tr><tr><td align="left" valign="top" width="40%">9.7.&#160;Background Recovery&#160;</td><td align="center" width="20%"><a accesskey="h" href="index.html">Home</a></td><td align="right" valign="top" width="40%">&#160;9.9.&#160;Connection Limits</td></tr></table></div></div>
\ No newline at end of file
+  with representative data.</p><div class="footnotes"><br /><hr style="width:100; text-align:left;margin-left: 0" /><div class="footnote" id="ftn.d0e5714"><p><a class="para" href="#d0e5714"><sup class="para">[13] </sup></a>Message compression is not yet supported for the 1.0
+    protocol.</p></div></div></div><div class="navfooter"><hr /><table summary="Navigation footer" width="100%"><tr><td align="left" width="40%"><a accesskey="p" href="Java-Broker-Runtime-Background-Recovery.html">Prev</a>&#160;</td><td align="center" width="20%"><a accesskey="u" href="Java-Broker-Runtime.html">Up</a></td><td align="right" width="40%">&#160;<a accesskey="n" href="Java-Broker-Runtime-Connection-Limit.html">Next</a></td></tr><tr><td align="left" valign="top" width="40%">9.7.&#160;Background Recovery&#160;</td><td align="center" width="20%"><a accesskey="h" href="AMQP-Messaging-Broker-Java-Book.html">Home</a></td><td align="right" valign="top" width="40%">&#160;9.9.&#160;Connection Limits</td></tr></table></div></div>
\ No newline at end of file

Modified: qpid/site/input/releases/qpid-java-trunk/java-broker/book/Java-Broker-Runtime-Producer-Transaction-Timeout.html.in
URL: http://svn.apache.org/viewvc/qpid/site/input/releases/qpid-java-trunk/java-broker/book/Java-Broker-Runtime-Producer-Transaction-Timeout.html.in?rev=1724964&r1=1724963&r2=1724964&view=diff
==============================================================================
--- qpid/site/input/releases/qpid-java-trunk/java-broker/book/Java-Broker-Runtime-Producer-Transaction-Timeout.html.in (original)
+++ qpid/site/input/releases/qpid-java-trunk/java-broker/book/Java-Broker-Runtime-Producer-Transaction-Timeout.html.in Sat Jan 16 12:17:02 2016
@@ -1,6 +1,6 @@
-<div class="docbook"><div class="navheader"><table summary="Navigation header" width="100%"><tr><th align="center" colspan="3">9.3.&#160;Producer Transaction Timeout</th></tr><tr><td align="left" width="20%"><a accesskey="p" href="Java-Broker-Runtime-Disk-Space-Management.html">Prev</a>&#160;</td><th align="center" width="60%">Chapter&#160;9.&#160;Runtime</th><td align="right" width="20%">&#160;<a accesskey="n" href="Java-Broker-Runtime-Handling-Undeliverable-Messages.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title"><a id="Java-Broker-Runtime-Producer-Transaction-Timeout"></a>9.3.&#160;Producer Transaction Timeout</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="Java-Broker-Runtime-Producer-Transaction-Timeout-GeneralInformation"></a>9.3.1.&#160;General Information</h3></div></div></div><p> The transaction timeout mechanism is used to control broker resources when c
 lients
+<div class="docbook"><div class="navheader"><table summary="Navigation header" width="100%"><tr><th align="center" colspan="3">9.3.&#160;Producer Transaction Timeout</th></tr><tr><td align="left" width="20%"><a accesskey="p" href="Java-Broker-Runtime-Disk-Space-Management.html">Prev</a>&#160;</td><th align="center" width="60%">Chapter&#160;9.&#160;Runtime</th><td align="right" width="20%">&#160;<a accesskey="n" href="Java-Broker-Runtime-Handling-Undeliverable-Messages.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="Java-Broker-Runtime-Producer-Transaction-Timeout"></a>9.3.&#160;Producer Transaction Timeout</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="Java-Broker-Runtime-Producer-Transaction-Timeout-GeneralInformation"></a>9.3.1.&#160;General Information</h3></div></div></div><p> The transaction timeout mechanism is used to control bro
 ker resources when clients
    producing messages using transactional sessions hang or otherwise become unresponsive, or simply
-   begin a transaction and keep using it without ever calling <a class="ulink" href="http://docs.oracle.com/javaee/6/api/javax/jms/Session.html#commit" target="_top">Session#commit()</a>.</p><p>Users can choose to configure an idleWarn or openWarn threshold, after which the identified
+   begin a transaction and keep using it without ever calling <a class="link" href="http://docs.oracle.com/javaee/6/api/javax/jms/Session.html#commit" target="_top">Session#commit()</a>.</p><p>Users can choose to configure an idleWarn or openWarn threshold, after which the identified
    transaction should be logged as a WARN level alert as well as (more importantly) an idleClose or
    openClose threshold after which the transaction and the connection it applies to will be
    closed.</p><p>This feature is particularly useful in environments where the owner of the broker does not
@@ -9,7 +9,7 @@
    broker holds an open transaction on the persistent store. This can have undesirable consequences
    if the store does not time out or close long-running transactions, such as with BDB. This can can
    result in a rapid increase in disk usage size, bounded only by available space, due to growth of
-   the transaction log. </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="Java-Broker-Runtime-Producer-Transaction-Timeout-Scope"></a>9.3.3.&#160;Scope</h3></div></div></div><p>Note that only <a class="ulink" href="http://docs.oracle.com/javaee/6/api/javax/jms/MessageProducer.html" target="_top">MessageProducer</a> clients will be affected by a transaction timeout, since store
+   the transaction log. </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="Java-Broker-Runtime-Producer-Transaction-Timeout-Scope"></a>9.3.3.&#160;Scope</h3></div></div></div><p>Note that only <a class="link" href="http://docs.oracle.com/javaee/6/api/javax/jms/MessageProducer.html" target="_top">MessageProducer</a> clients will be affected by a transaction timeout, since store
    transaction lifespan on a consumer only spans the execution of the call to Session#commit() and
    there is no scope for a long-lived transaction to arise.</p><p>It is also important to note that the transaction timeout mechanism is purely a JMS
    transaction timeout, and unrelated to any other timeouts in the Qpid client library and will have
@@ -17,7 +17,7 @@
    gives a brief overview of what the Transaction Timeout feature can do.</p><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="Java-Broker-Runtime-Producer-Transaction-Timeout-Effect-Broker-Side"></a>9.3.4.1.&#160;Broker Logging and Connection Close</h4></div></div></div><p>When the openWarn or idleWarn specified threshold is exceeded, the broker will log a WARN
     level alert with details of the connection and channel on which the threshold has been exceeded,
     along with the age of the transaction.</p><p>When the openClose or idleClose specified threshold value is exceeded, the broker will
-    throw an exception back to the client connection via the <a class="ulink" href="http://docs.oracle.com/javaee/6/api/javax/jms/ExceptionListener.html" target="_top">ExceptionListener</a>, log the
+    throw an exception back to the client connection via the <a class="link" href="http://docs.oracle.com/javaee/6/api/javax/jms/ExceptionListener.html" target="_top">ExceptionListener</a>, log the
     action and then close the connection.</p><p>The example broker log output shown below is where the idleWarn threshold specified is
     lower than the idleClose threshold and the broker therefore logs the idle transaction 3 times
     before the close threshold is triggered and the connection closed out.</p><pre class="screen">CHN-1008 : Idle Transaction : 13,116 ms
@@ -31,7 +31,7 @@ CHN-1007 : Open Transaction : 13,406 ms
 CHN-1007 : Open Transaction : 14,406 ms
 CHN-1003 : Close
    </pre></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="Java-Broker-Runtime-Producer-Transaction-Timeout-Effect-Client-Side"></a>9.3.4.2.&#160;Client Side Effect</h4></div></div></div><p>After a Close threshold has been exceeded, the trigger client will receive this exception
-    on its <a class="ulink" href="http://docs.oracle.com/javaee/6/api/javax/jms/ExceptionListener.html" target="_top">exception
+    on its <a class="link" href="http://docs.oracle.com/javaee/6/api/javax/jms/ExceptionListener.html" target="_top">exception
     listener</a>, prior to being disconnected:</p><code class="computeroutput">org.apache.qpid.AMQConnectionClosedException: Error: Idle transaction timed out
     [error code 506: resource error]</code><p>Any later attempt to use the connection will result in this exception being thrown:</p><pre class="screen">Producer: Caught an Exception: javax.jms.IllegalStateException: Object org.apache.qpid.client.AMQSession_0_8@129b0e1 has been closed
     javax.jms.IllegalStateException: Object org.apache.qpid.client.AMQSession_0_8@129b0e1 has been closed
@@ -54,4 +54,4 @@ CHN-1003 : Close
     Session and Connection. Clients that use the JMS API directly should be aware that sessions
     managing both consumers and producers, or multiple producers, will be affected by a single
     producer hanging or leaving a transaction idle or open, and closed, and must take appropriate
-    action to handle that scenario.</p></div></div></div><div class="navfooter"><hr /><table summary="Navigation footer" width="100%"><tr><td align="left" width="40%"><a accesskey="p" href="Java-Broker-Runtime-Disk-Space-Management.html">Prev</a>&#160;</td><td align="center" width="20%"><a accesskey="u" href="Java-Broker-Runtime.html">Up</a></td><td align="right" width="40%">&#160;<a accesskey="n" href="Java-Broker-Runtime-Handling-Undeliverable-Messages.html">Next</a></td></tr><tr><td align="left" valign="top" width="40%">9.2.&#160;Disk Space Management&#160;</td><td align="center" width="20%"><a accesskey="h" href="index.html">Home</a></td><td align="right" valign="top" width="40%">&#160;9.4.&#160;Handing Undeliverable Messages</td></tr></table></div></div>
\ No newline at end of file
+    action to handle that scenario.</p></div></div></div><div class="navfooter"><hr /><table summary="Navigation footer" width="100%"><tr><td align="left" width="40%"><a accesskey="p" href="Java-Broker-Runtime-Disk-Space-Management.html">Prev</a>&#160;</td><td align="center" width="20%"><a accesskey="u" href="Java-Broker-Runtime.html">Up</a></td><td align="right" width="40%">&#160;<a accesskey="n" href="Java-Broker-Runtime-Handling-Undeliverable-Messages.html">Next</a></td></tr><tr><td align="left" valign="top" width="40%">9.2.&#160;Disk Space Management&#160;</td><td align="center" width="20%"><a accesskey="h" href="AMQP-Messaging-Broker-Java-Book.html">Home</a></td><td align="right" valign="top" width="40%">&#160;9.4.&#160;Handing Undeliverable Messages</td></tr></table></div></div>
\ No newline at end of file



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org