<!DOCTYPE html>
<!--
 -
 - Licensed to the Apache Software Foundation (ASF) under one
 - or more contributor license agreements.  See the NOTICE file
 - distributed with this work for additional information
 - regarding copyright ownership.  The ASF licenses this file
 - to you under the Apache License, Version 2.0 (the
 - "License"); you may not use this file except in compliance
 - with the License.  You may obtain a copy of the License at
 -
 -   http://www.apache.org/licenses/LICENSE-2.0
 -
 - Unless required by applicable law or agreed to in writing,
 - software distributed under the License is distributed on an
 - "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 - KIND, either express or implied.  See the License for the
 - specific language governing permissions and limitations
 - under the License.
 -
-->
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
  <head>
    <title>9.6. Flow to Disk - Apache Qpid&#8482;</title>
    <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
    <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
    <link rel="stylesheet" href="/site.css" type="text/css" async="async"/>
    <link rel="stylesheet" href="/deferred.css" type="text/css" defer="defer"/>
    <script type="text/javascript">var _deferredFunctions = [];</script>
    <script type="text/javascript" src="/deferred.js" defer="defer"></script>
    <!--[if lte IE 8]>
      <link rel="stylesheet" href="/ie.css" type="text/css"/>
      <script type="text/javascript" src="/html5shiv.js"></script>
    <![endif]-->

    <!-- Redirects for `go get` and godoc.org -->
    <meta name="go-import"
          content="qpid.apache.org git https://gitbox.apache.org/repos/asf/qpid-proton.git"/>
    <meta name="go-source"
          content="qpid.apache.org
https://github.com/apache/qpid-proton/blob/go1/README.md
https://github.com/apache/qpid-proton/tree/go1{/dir}
https://github.com/apache/qpid-proton/blob/go1{/dir}/{file}#L{line}"/>
  </head>
  <body>
    <div id="-content">
      <div id="-top" class="panel">
        <a id="-menu-link"><img width="16" height="16" src="" alt="Menu"/></a>

        <a id="-search-link"><img width="22" height="16" src="" alt="Search"/></a>

        <ul id="-global-navigation">
          <li><a id="-logotype" href="/index.html">Apache Qpid<sup>&#8482;</sup></a></li>
          <li><a href="/documentation.html">Documentation</a></li>
          <li><a href="/download.html">Download</a></li>
          <li><a href="/discussion.html">Discussion</a></li>
        </ul>
      </div>

      <div id="-menu" class="panel" style="display: none;">
        <div class="flex">
          <section>
            <h3>Project</h3>

            <ul>
              <li><a href="/overview.html">Overview</a></li>
              <li><a href="/components/index.html">Components</a></li>
              <li><a href="/releases/index.html">Releases</a></li>
            </ul>
          </section>

          <section>
            <h3>Messaging APIs</h3>

            <ul>
              <li><a href="/proton/index.html">Qpid Proton</a></li>
              <li><a href="/components/jms/index.html">Qpid JMS</a></li>
              <li><a href="/components/messaging-api/index.html">Qpid Messaging API</a></li>
            </ul>
          </section>

          <section>
            <h3>Servers and tools</h3>

            <ul>
              <li><a href="/components/broker-j/index.html">Broker-J</a></li>
              <li><a href="/components/cpp-broker/index.html">C++ broker</a></li>
              <li><a href="/components/dispatch-router/index.html">Dispatch router</a></li>
            </ul>
          </section>

          <section>
            <h3>Resources</h3>

            <ul>
              <li><a href="/dashboard.html">Dashboard</a></li>
              <li><a href="https://cwiki.apache.org/confluence/display/qpid/Index">Wiki</a></li>
              <li><a href="/resources.html">More resources</a></li>
            </ul>
          </section>
        </div>
      </div>

      <div id="-search" class="panel" style="display: none;">
        <form action="http://www.google.com/search" method="get">
          <input type="hidden" name="sitesearch" value="qpid.apache.org"/>
          <input type="text" name="q" maxlength="255" autofocus="autofocus" tabindex="1"/>
          <button type="submit">Search</button>
          <a href="/search.html">More ways to search</a>
        </form>
      </div>

      <div id="-middle" class="panel">
        <ul id="-path-navigation"><li><a href="/index.html">Home</a></li><li><a href="/releases/index.html">Releases</a></li><li><a href="/releases/qpid-broker-j-9.2.0/index.html">Qpid Broker-J 9.2.0</a></li><li><a href="/releases/qpid-broker-j-9.2.0/book/index.html">Apache Qpid Broker-J</a></li><li>9.6. Flow to Disk</li></ul>

        <div id="-middle-content">
          <div class="docbook"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">9.6. Flow to Disk</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="Java-Broker-Runtime-Close-Connection-When-No-Route.html">Prev</a> </td><th width="60%" align="center">Chapter 9. Runtime</th><td width="20%" align="right"> <a accesskey="n" href="Java-Broker-Runtime-Consumers.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. 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.11. 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 75% 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 direct memory with the default of 75% available for messages.
    The first queue will have a target size of 320MB and the second 430MB. Once 750MB 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 750MB.</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 75% of the JVM maximum heap size.</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="Java-Broker-Runtime-Flow-To-Disk-Monitoring"></a>9.6.1. Flow to Disk Monitoring</h3></div></div></div><p>A number of statistics attributes are available on the <code class="literal">Broker</code> to allow monitoring
      of the amount of utilized direct memory by the enqueued messages.
    </p><p>The total amount of allocated direct memory by the <code class="literal">Broker</code> can be determined by
      checking <code class="literal">Broker</code> statistics <code class="literal">usedDirectMemorySize</code>. There is another
      <code class="literal">Broker</code> level statistics <code class="literal">directMemoryTotalCapacity</code> to get the total amount
      of allocated direct memory. Usually, the values reported by both statistics attributes
      <code class="literal">usedDirectMemorySize</code> and <code class="literal">directMemoryTotalCapacity</code> are the same
      or do not differ much.
    </p><p>The direct memory consumed by the <code class="literal">VirtualHost</code> messages is reported as
      <code class="literal">VirtualHost</code> statistics <code class="literal">inMemoryMessageSize</code>. The current value of
      <code class="literal">VirtualHost</code> direct memory threshold is exposed with statistics attribute
      <code class="literal">inMemoryMessageThreshold</code>. When the value of <code class="literal">inMemoryMessageSize</code> is
      greater than <code class="literal">inMemoryMessageThreshold</code>, the flow to disk is triggered to bring the amount of
      direct memory consumed by the <code class="literal">VirtualHost</code> messages in-line with the
      <code class="literal">inMemoryMessageThreshold</code>.
    </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="Java-Broker-Runtime-Flow-To-Disk-Logging"></a>9.6.2. Flow to Disk Logging</h3></div></div></div><p>The <code class="literal">Flow to Disk</code> events are not reported as operational logs or
      <code class="literal">INFO</code> logs due to quite frequent triggering of <code class="literal">Flow to Disk</code>
      for messaging use cases requiring holding messages on the <code class="literal">Broker</code> side for some time.
      As result, the <code class="literal">Flow to Disk</code> logs can quickly dominate the broker logs and cause unnecessary
      disk consumption.
    </p><p>Though, if required, the <code class="literal">Flow to Disk</code> DEBUG logs can be enabled by adding
      the following logging rule into the corresponding <code class="literal">Broker</code> logger.
      </p><div class="example"><a id="d0e9203"></a><p class="title"><strong>Example 9.1. Flow to Disk logging rule</strong></p><div class="example-contents"><pre class="programlisting">
          {
            "name" : "DirectMemory",
            "type" : "NameAndLevel",
            "level" : "DEBUG",
            "loggerName" : "org.apache.qpid.server.directMemory.*"
          }
        </pre></div></div><p><br class="example-break" />
    </p><p>Please note, that the logger <code class="literal">org.apache.qpid.server.directMemory.broker</code>
      is used by the <code class="literal">Broker</code> to report conditions when direct memory utilization exceeds the pred-defined
      <code class="literal">Broker</code> threshold, whilst the logger <code class="literal">org.apache.qpid.server.directMemory.virtualhost</code>
      is used to report conditions when direct memory utilization by the <code class="literal">VirtualHost</code>
      messages exceeds the current value of the <code class="literal">VirtualHost</code> threshold.
    </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="Java-Broker-Runtime-Close-Connection-When-No-Route.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="Java-Broker-Runtime.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="Java-Broker-Runtime-Consumers.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">9.5. Closing client connections on unroutable mandatory messages </td><td width="20%" align="center"><a accesskey="h" href="Apache-Qpid-Broker-J-Book.html">Home</a></td><td width="40%" align="right" valign="top"> 9.7. Consumers</td></tr></table></div></div>

          <hr/>

          <ul id="-apache-navigation">
            <li><a href="http://www.apache.org/">Apache</a></li>
            <li><a href="http://www.apache.org/licenses/">License</a></li>
            <li><a href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li>
            <li><a href="http://www.apache.org/foundation/thanks.html">Thanks!</a></li>
            <li><a href="/security.html">Security</a></li>
            <li><a href="http://www.apache.org/"><img id="-apache-feather" width="48" height="14" src="" alt="Apache"/></a></li>
          </ul>

          <p id="-legal">
            Apache Qpid, Messaging built on AMQP; Copyright &#169; 2015
            The Apache Software Foundation; Licensed under
            the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache
            License, Version 2.0</a>; Apache Qpid, Qpid, Qpid Proton,
            Proton, Apache, the Apache feather logo, and the Apache Qpid
            project logo are trademarks of The Apache Software
            Foundation; All other marks mentioned may be trademarks or
            registered trademarks of their respective owners
          </p>
        </div>
      </div>
    </div>
  </body>
</html>
