<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
<!-- $LastChangedRevision$ -->

<!--
 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.
-->

<manualpage metafile="ab.xml.meta">
<parentdocument href="./">Programs</parentdocument>

<title>ab - Apache HTTP server benchmarking tool</title>

<summary>
    <p><code>ab</code> is a tool for benchmarking your Apache Hypertext
    Transfer Protocol (HTTP) server. It is designed to give you an impression
    of how your current Apache installation performs. This especially shows
    you how many requests per second your Apache installation is capable of
    serving.</p>
</summary>
<seealso><program>httpd</program></seealso>

<section id="synopsis"><title>Synopsis</title>
    <p><code><strong>ab</strong>
    [ -<strong>A</strong> <var>auth-username</var>:<var>password</var> ]
    [ -<strong>b</strong> <var>windowsize</var> ]
    [ -<strong>B</strong> <var>local-address</var> ]
    [ -<strong>c</strong> <var>concurrency</var> ]
    [ -<strong>C</strong> <var>cookie-name</var>=<var>value</var> ]
    [ -<strong>d</strong> ]
    [ -<strong>e</strong> <var>csv-file</var> ]
    [ -<strong>f</strong> <var>protocol</var> ]
    [ -<strong>g</strong> <var>gnuplot-file</var> ]
    [ -<strong>h</strong> ]
    [ -<strong>H</strong> <var>custom-header</var> ]
    [ -<strong>i</strong> ]
    [ -<strong>k</strong> ]
    [ -<strong>l</strong> ]
    [ -<strong>m</strong> <var>HTTP-method</var> ]
    [ -<strong>n</strong> <var>requests</var> ]
    [ -<strong>p</strong> <var>POST-file</var> ]
    [ -<strong>P</strong> <var>proxy-auth-username</var>:<var>password</var> ]
    [ -<strong>q</strong> ]
    [ -<strong>r</strong> ]
    [ -<strong>s</strong> <var>timeout</var> ]
    [ -<strong>S</strong> ]
    [ -<strong>t</strong> <var>timelimit</var> ]
    [ -<strong>T</strong> <var>content-type</var> ]
    [ -<strong>u</strong> <var>PUT-file</var> ]
    [ -<strong>v</strong> <var>verbosity</var>]
    [ -<strong>V</strong> ]
    [ -<strong>w</strong> ]
    [ -<strong>x</strong> <var>&lt;table&gt;-attributes</var> ]
    [ -<strong>X</strong> <var>proxy</var>[:<var>port</var>] ]
    [ -<strong>y</strong> <var>&lt;tr&gt;-attributes</var> ]
    [ -<strong>z</strong> <var>&lt;td&gt;-attributes</var> ]
    [ -<strong>Z</strong> <var>ciphersuite</var> ]
    [http[s]://]<var>hostname</var>[:<var>port</var>]/<var>path</var></code></p>
</section>

<section id="options"><title>Options</title>
    <dl>
    <dt><code>-A <var>auth-username</var>:<var>password</var></code></dt>
    <dd>Supply BASIC Authentication credentials to the server. The username and
    password are separated by a single <code>:</code> and sent on the wire
    base64 encoded. The string is sent regardless of whether the server needs
    it (<em>i.e.</em>, has sent an 401  authentication needed).</dd>

    <dt><code>-b <var>windowsize</var></code></dt>
    <dd>Size of TCP send/receive buffer, in bytes.</dd>

    <dt><code>-B <var>local-address</var></code></dt>
    <dd>Address to bind to when making outgoing connections.</dd>

    <dt><code>-c <var>concurrency</var></code></dt>
    <dd>Number of multiple requests to perform at a time. Default is one
    request at a time.</dd>

    <dt><code>-C <var>cookie-name</var>=<var>value</var></code></dt>
    <dd>Add a <code>Cookie:</code> line to the request. The  argument  is
    typically in the form of a <code><var>name</var>=<var>value</var></code>
    pair. This field is repeatable.</dd>

    <dt><code>-d</code></dt>
    <dd>Do not display the "percentage served within XX [ms] table". (legacy
    support).</dd>

    <dt><code>-e <var>csv-file</var></code></dt>
    <dd>Write a Comma separated value (CSV) file which contains for each
    percentage (from 1% to 100%) the time (in milliseconds) it took to serve
    that percentage of the requests. This is usually more useful than the
    'gnuplot' file; as the results are already 'binned'.</dd>

    <dt><code>-f <var>protocol</var></code></dt>
    <dd>Specify SSL/TLS protocol (SSL2, SSL3, TLS1, TLS1.1, TLS1.2, or ALL).
    TLS1.1 and TLS1.2 support available in 2.4.4 and later.</dd>

    <dt><code>-g <var>gnuplot-file</var></code></dt>
    <dd>Write all measured values out as a 'gnuplot' or TSV (Tab separate
    values) file. This file can easily be imported into packages like Gnuplot,
    IDL, Mathematica, Igor or even Excel. The labels are on the first line of
    the file. </dd>

    <dt><code>-h</code></dt>
    <dd>Display usage information.</dd>

    <dt><code>-H <var>custom-header</var></code></dt>
    <dd>Append extra headers to the request.  The  argument  is typically in
    the form of a valid header line, containing a colon-separated field-value
    pair (<em>i.e.</em>, <code>"Accept-Encoding: zip/zop;8bit"</code>).</dd>

    <dt><code>-i</code></dt>
    <dd>Do <code>HEAD</code> requests instead of <code>GET</code>.</dd>

    <dt><code>-k</code></dt>
    <dd>Enable the HTTP KeepAlive feature, <em>i.e.</em>, perform multiple
    requests within one HTTP session. Default is no KeepAlive.</dd>

    <dt><code>-l</code></dt>
    <dd>Do not report errors if the length of the responses is not constant. This 
    can be useful for dynamic pages.
    Available in 2.4.7 and later.
    </dd>

    <dt><code>-m <var>HTTP-method</var></code></dt>
    <dd>Custom HTTP method for the requests.
    Available in 2.4.10 and later.</dd>

    <dt><code>-n <var>requests</var></code></dt>
    <dd>Number of requests to perform for the benchmarking session. The default
    is to just perform a single request which usually leads to
    non-representative benchmarking results.</dd>

    <dt><code>-p <var>POST-file</var></code></dt>
    <dd>File containing data to POST.  Remember to also set <code>-T</code>.</dd>

    <dt><code>-P <var>proxy-auth-username</var>:<var>password</var></code></dt>
    <dd>Supply BASIC Authentication credentials to a proxy en-route. The
    username and password are separated by a single <code>:</code> and sent on
    the  wire base64 encoded. The string is sent regardless of whether the
    proxy needs it (<em>i.e.</em>, has  sent an 407 proxy authentication
    needed).</dd>

    <dt><code>-q</code></dt>
    <dd>When processing more than 150 requests, <code>ab</code> outputs a
    progress count on <code>stderr</code> every 10% or 100 requests or so. The
    <code>-q</code> flag will suppress these messages.</dd>

    <dt><code>-r</code></dt>
    <dd>Don't exit on socket receive errors.</dd>

    <dt><code>-s <var>timeout</var></code></dt>
    <dd>Maximum number of seconds to wait before the socket times out.
    Default is 30 seconds.
    Available in 2.4.4 and later.</dd>

    <dt><code>-S</code></dt>
    <dd>Do not display the median and standard deviation values, nor display
    the warning/error messages when the average and median are more than
    one or two times the standard deviation apart. And default to the
    min/avg/max values. (legacy support).</dd>

    <dt><code>-t <var>timelimit</var></code></dt>
    <dd>Maximum number of seconds to  spend  for  benchmarking. This implies a
    <code>-n 50000</code> internally. Use this to benchmark the server within a
    fixed total amount of time. Per default there is no timelimit.</dd>

    <dt><code>-T <var>content-type</var></code></dt>
    <dd>Content-type header to use for POST/PUT data, eg.
    <code>application/x-www-form-urlencoded</code>.
    Default is <code>text/plain</code>.</dd>

    <dt><code>-u <var>PUT-file</var></code></dt>
    <dd>File containing data to PUT.  Remember to also set <code>-T</code>.</dd>

    <dt><code>-v <var>verbosity</var></code></dt>
    <dd>Set verbosity level - <code>4</code> and above prints information on
    headers, <code>3</code> and above prints response codes (404, 200, etc.),
    <code>2</code> and above prints warnings and info.</dd>

    <dt><code>-V</code></dt>
    <dd>Display version number and exit.</dd>

    <dt><code>-w</code></dt>
    <dd>Print out results in HTML tables. Default table is two columns wide,
    with a white background.</dd>

    <dt><code>-x <var>&lt;table&gt;-attributes</var></code></dt>
    <dd>String to use as attributes for <code>&lt;table&gt;</code>. Attributes
    are inserted <code>&lt;table <var>here</var> &gt;</code>.</dd>

    <dt><code>-X <var>proxy</var>[:<var>port</var>]</code></dt>
    <dd>Use a proxy server for the requests.</dd>

    <dt><code>-y <var>&lt;tr&gt;-attributes</var></code></dt>
    <dd>String to use as attributes for <code>&lt;tr&gt;</code>.</dd>

    <dt><code>-z <var>&lt;td&gt;-attributes</var></code></dt>
    <dd>String to use as attributes for <code>&lt;td&gt;</code>.</dd>

    <dt><code>-Z <var>ciphersuite</var></code></dt>
    <dd>Specify SSL/TLS cipher suite (See openssl ciphers)</dd>
    </dl>
</section>

<section id="output"><title>Output</title>
    <p>The following list describes the values returned by <code>ab</code>:
    </p>

    <dl>
        <dt>Server Software</dt>
        <dd>The value, if any, returned in the <var>server</var> HTTP header
        of the first successful response. This includes all characters in the
        header from beginning to the point a character with decimal value of 32
        (most notably: a space or CR/LF) is detected.</dd>

        <dt>Server Hostname</dt>
        <dd>The DNS or IP address given on the command line</dd>

        <dt>Server Port</dt>
        <dd>The port to which ab is connecting. If no port is given on the
        command line, this will default to 80 for http and 443 for
        https.</dd>

        <dt>SSL/TLS Protocol</dt>
        <dd>The protocol parameters negotiated between the client and server.
        This will only be printed if SSL is used.</dd>

        <dt>Document Path</dt>
        <dd>The request URI parsed from the command line string.</dd>

        <dt>Document Length</dt>
        <dd>This is the size in bytes of the first successfully returned document.
        If the document length changes during testing, the response is
        considered an error.</dd>

        <dt>Concurrency Level</dt>
        <dd>The number of concurrent clients used during the test</dd>

        <dt>Time taken for tests</dt>
        <dd>This is the time taken from the moment the first socket connection
        is created to the moment the last response is received</dd>

        <dt>Complete requests</dt>
        <dd>The number of successful responses received</dd>

        <dt>Failed requests</dt>
        <dd>The number of requests that were considered a failure. If the
        number is greater than zero, another line will be printed showing the
        number of requests that failed due to connecting, reading, incorrect
        content length, or exceptions.</dd>

        <dt>Write errors</dt>
        <dd>The number of errors that failed during write (broken pipe).</dd>

        <dt>Non-2xx responses</dt>
        <dd>The number of responses that were not in the 200 series of response
        codes. If all responses were 200, this field is not printed.</dd>

        <dt>Keep-Alive requests</dt>
        <dd>The number of connections that resulted in Keep-Alive requests</dd>

        <dt>Total body sent</dt>
        <dd>If configured to send data as part of the test, this is the total
        number of bytes sent during the tests. This field is omitted if the test
        did not include a body to send.</dd>

        <dt>Total transferred</dt>
        <dd>The total number of bytes received from the server. This number
        is essentially the number of bytes sent over the wire.</dd>

        <dt>HTML transferred</dt>
        <dd>The total number of document bytes received from the server. This
        number excludes bytes received in HTTP headers</dd>

        <dt>Requests per second</dt>
        <dd>This is the number of requests per second. This value is the result
        of dividing the number of requests by the total time taken</dd>

        <dt>Time per request</dt>
        <dd>The average time spent per request. The first value is calculated
        with the formula <code>concurrency * timetaken * 1000 / done</code>
        while the second value is calculated with the formula
        <code>timetaken * 1000 / done</code></dd>

        <dt>Transfer rate</dt>
        <dd>The rate of transfer as calculated by the formula
        <code>totalread / 1024 / timetaken</code></dd>
    </dl>
</section>

<section id="bugs"><title>Bugs</title>
    <p>There are various statically declared buffers of fixed length. Combined
    with the lazy parsing of the command line arguments, the response headers
    from the server and other external inputs, this might bite you.</p>

    <p>It does not implement HTTP/1.x fully; only accepts some 'expected' forms
    of responses. The rather heavy use of <code>strstr(3)</code> shows up top
    in profile, which might indicate a performance problem; <em>i.e.</em>, you
    would measure the <code>ab</code> performance rather than the server's.</p>
</section>


</manualpage>
