<!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>Appendix&#160;A.&#160;Environment Variables - 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-7.1.10/index.html">Qpid Broker-J 7.1.10</a></li><li><a href="/releases/qpid-broker-j-7.1.10/book/index.html">Apache Qpid Broker-J</a></li><li>Appendix&#160;A.&#160;Environment Variables</li></ul>

        <div id="-middle-content">
          <div class="docbook"><div class="navheader"><table summary="Navigation header" width="100%"><tr><th align="center" colspan="3">Appendix&#160;A.&#160;Environment Variables</th></tr><tr><td align="left" width="20%"><a accesskey="p" href="Java-Broker-Backup-And-Recovery-Virtualhost.html">Prev</a>&#160;</td><th align="center" width="60%">&#160;</th><td align="right" width="20%">&#160;<a accesskey="n" href="Java-Broker-Appendix-System-Properties.html">Next</a></td></tr></table><hr /></div><div class="appendix"><div class="titlepage"><div><div><h1 class="title"><a id="Java-Broker-Appendix-Environment-Variables"></a>Appendix&#160;A.&#160;Environment Variables</h1></div></div></div><p>The following table describes the environment variables understood by the Qpid scripts
    contained within the <code class="literal">/bin</code> directory within the Broker distribution.</p><p>To take effect, these variables must be set within the shell (and exported - if using Unix)
    before invoking the script.</p><div class="table"><a id="d0e7316"></a><p class="title"><strong>Table&#160;A.1.&#160;Environment variables</strong></p><div class="table-contents"><table border="1" summary="Environment variables" width="100%"><colgroup><col class="envvar" /><col class="default" /><col class="purpose" /></colgroup><thead><tr><th>Environment variable</th><th>Default</th><th>Purpose</th></tr></thead><tbody><tr><td><a id="Java-Broker-Appendix-Environment-Variables-Qpid-Home"></a>QPID_HOME</td><td>
            <p>None</p>
          </td><td>
            <p>The variable used to tell the Broker its installation directory. It must be an
              absolute path. This is used to determine the location of Qpid's dependency JARs and
              some configuration files.</p>
            <p>Typically the value of this variable will look similar to
                <code class="literal">c:\qpid\qpid-broker\\7.1.10</code> (Windows) or
                <code class="literal">/usr/local/qpid/qpid-broker/7.1.10</code> (Unix). The
              installation prefix will differ from installation to installation. </p>
            <p>If not set, a value for <code class="literal">QPID_HOME</code> is derived from the location
              of the script itself.</p>
          </td></tr><tr><td><a id="Java-Broker-Appendix-Environment-Variables-Qpid-Work"></a>QPID_WORK</td><td>
            <p>User's home directory</p>
          </td><td>
            <p>Used as the default root directory for any data written by the Broker. This is the
              default location for any message data written to persistent stores and the Broker's
              log file.</p>
            <p>For example, <code class="literal">QPID_WORK=/var/qpidwork</code>.</p>
          </td></tr><tr><td><a id="Java-Broker-Appendix-Environment-Variables-Qpid-Opts"></a>QPID_OPTS</td><td>
            <p>None</p>
          </td><td>
            <p>This is the preferred mechanism for passing <a class="link" href="Java-Broker-Appendix-System-Properties.html" title="Appendix&#160;B.&#160;System Properties">Java system properties</a> to the
              Broker. The value must be a list of system properties each separate by a space.
                  <code class="literal">-D<em class="replaceable"><code>name1</code></em>=<em class="replaceable"><code>value1</code></em>
                  -D<em class="replaceable"><code>name2</code></em>=<em class="replaceable"><code>value2</code></em></code>.
            </p>
          </td></tr><tr><td><a id="Java-Broker-Appendix-Environment-Variables-Qpid-Java-Gc"></a>QPID_JAVA_GC</td><td>
            <code class="literal">-XX:+HeapDumpOnOutOfMemoryError -XX:+UseConcMarkSweepGC</code>
          </td><td>
            <p>This is the preferred mechanism for customising garbage collection behaviour. The
              value should contain valid garbage collection options(s) for the target JVM.</p>
            <p>Refer to the JVM's documentation for details.</p>
          </td></tr><tr><td><a id="Java-Broker-Appendix-Environment-Variables-Qpid-Java-Mem"></a>QPID_JAVA_MEM</td><td>
            <code class="literal">-Xmx512m -XX:MaxDirectMemorySize=1536m</code>
          </td><td>
            <p>This is the preferred mechanism for customising the size of the JVM's heap and
              direct memory.
              The value should contain valid memory option(s) for the target JVM. Oracle JVMs
              understand <code class="literal">-Xmx</code> to specify a maximum heap size,
               <code class="literal">-Xms</code> an initial size, and
               <code class="literal">-XX:MaxDirectMemorySize</code> for the maximum amount of direct
               memory.</p>
            <p>For example, <code class="code">QPID_JAVA_MEM="-Xmx6g -XX:MaxDirectMemorySize=12g"</code> would
              set a maximum heap size of 6GB and 12GB of direct memory.</p>
            <p>Refer to the JVM's documentation for details.</p>
          </td></tr><tr><td><a id="Java-Broker-Appendix-Environment-Variables-Java-Opts"></a>JAVA_OPTS</td><td>None</td><td>
            <p>This is the preferred mechanism for passing any other JVM options. This variable is
              commonly used to pass options for diagnostic purposes, for instance to turn on verbose
              GC. <code class="literal">-verbose:gc</code>.</p>
            <p>Refer to the JVM's documentation for details.</p>
          </td></tr></tbody></table></div></div><br class="table-break" /></div><div class="navfooter"><hr /><table summary="Navigation footer" width="100%"><tr><td align="left" width="40%"><a accesskey="p" href="Java-Broker-Backup-And-Recovery-Virtualhost.html">Prev</a>&#160;</td><td align="center" width="20%">&#160;</td><td align="right" width="40%">&#160;<a accesskey="n" href="Java-Broker-Appendix-System-Properties.html">Next</a></td></tr><tr><td align="left" valign="top" width="40%">11.3.&#160;Virtualhost&#160;</td><td align="center" width="20%"><a accesskey="h" href="Apache-Qpid-Broker-J-Book.html">Home</a></td><td align="right" valign="top" width="40%">&#160;Appendix&#160;B.&#160;System Properties</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>
