ab-Apache HTTP 服务器基准测试工具
ab
是用于对 Apache 超文本传输协议(HTTP)服务器进行基准测试的工具。它旨在使您对当前的 Apache 安装如何执行有一个印象。这尤其向您显示 Apache 安装每秒能够处理多少个请求。
Synopsis
ab [ -A auth-username:password ] [ -b windowsize ] [ -B local-address ] [ -c concurrency ] [ -C cookie-name=value ] [ -d ] [ -e csv-file ] [ -E client-certificate file ] [ -f protocol ] [ -g gnuplot-file ] [ -h ] [ -H custom-header ] [ -i ] [ -k ] [ -l ] [ -m HTTP-method ] [ -n requests ] [ -p POST-file ] [ -P proxy-auth-username:password ] [ -q ] [ -r ] [ -s timeout ] [ -S ] [ -t timelimit ] [ -T content-type ] [ -u PUT-file ] [ -v verbosity] [ -V ] [ -w ] [ -x <table>-attributes ] [ -X proxy[:port] ] [ -y <tr>-attributes ] [ -z <td>-attributes ] [ -Z ciphersuite ] [http[s]://]hostname[:port]/path
Options
-
-A auth-username:password
- 向服务器提供 BASIC 身份验证凭据。用户名和密码用单个
:
分隔,并通过 base64 编码的网络发送。无论服务器是否需要该字符串,都将发送该字符串(即已发送了所需的 401 身份验证)。
- 向服务器提供 BASIC 身份验证凭据。用户名和密码用单个
-
-b windowsize
- TCP 发送/接收缓冲区的大小,以字节为单位。
-
-B local-address
- 进行传出连接时要绑定的地址。
-
-c concurrency
- 一次执行的多个请求的数量。默认值为一次一个请求。
-
-C cookie-name=value
- 在请求中添加
Cookie:
行。该参数通常采用name=value
对的形式。该字段是可重复的。
- 在请求中添加
-
-d
- 不要显示“ XX [ms]表中的投放百分比”。 (旧版支持)。
-
-e csv-file
- 编写一个逗号分隔值(CSV)文件,其中包含每个百分比(从 1%到 100%)的服务时间(以毫秒为单位),该百分比用于处理该百分比的请求。通常,它比“ gnuplot”文件有用。因为结果已经“装箱”了。
-
-E client-certificate-file
- 连接到 SSL 网站时,请使用提供的 PEM 格式的 Client 端证书对服务器进行身份验证。该文件应包含 Client 端证书,然后是中间证书,然后是私钥。在 2.4.36 及更高版本中可用。
-
-f protocol
- 指定 SSL/TLS 协议(SSL2,SSL3,TLS1,TLS1.1,TLS1.2 或 ALL)。 TLS1.1 和 TLS1.2 支持在 2.4.4 及更高版本中提供。
-
-g gnuplot-file
- 将所有测量值写为“ gnuplot”或 TSV(制表符单独值)文件。此文件可以轻松导入到 Gnuplot,IDL,Mathematica,Igor 甚至 Excel 等软件包中。标签位于文件的第一行。
-
-h
- 显示使用情况信息。
-
-H custom-header
- 将额外的 Headers 添加到请求。参数通常采用有效标题行的形式,其中包含用冒号分隔的字段/值对(* i.e. *
"Accept-Encoding: zip/zop;8bit"
)。
- 将额外的 Headers 添加到请求。参数通常采用有效标题行的形式,其中包含用冒号分隔的字段/值对(* i.e. *
-
-i
- 发出
HEAD
次请求,而不是GET
次。
- 发出
-
-k
- 启用 HTTP KeepAlive 功能即,在一个 HTTP 会话中执行多个请求。默认为 no KeepAlive。
-
-l
- 如果响应的长度不是恒定的,请不要报告错误。这对于动态页面很有用。在 2.4.7 及更高版本中可用。
-
-m HTTP-method
- 请求的自定义 HTTP 方法。在 2.4.10 及更高版本中可用。
-
-n requests
- 为基准测试会话执行的请求数。默认设置是仅执行一个请求,这通常会导致非代表性的基准测试结果。
-
-p POST-file
- 包含要发布的数据的文件。记住还要设置
-T
。
- 包含要发布的数据的文件。记住还要设置
-
-P proxy-auth-username:password
- 在代理途中提供 BASIC 身份验证凭据。用户名和密码用单个
:
分隔,并通过 base64 编码的网络发送。无论代理是否需要该字符串,都将发送该字符串(即已发送了所需的 407 代理身份验证)。
- 在代理途中提供 BASIC 身份验证凭据。用户名和密码用单个
-
-q
- 当处理 150 个以上的请求时,
ab
每 10%或 100 个左右的请求在stderr
上输出进度计数。-q
标志将禁止显示这些消息。
- 当处理 150 个以上的请求时,
-
-r
- 不要退出套接字接收错误。
-
-s timeout
- 套接字超时之前要 await 的最大秒数。默认值为 30 秒。在 2.4.4 及更高版本中可用。
-
-S
- 当平均值和中位数相距标准偏差的一倍或两倍以上时,请勿显示中位数和标准偏差值,也不会显示警告/错误消息。并默认为最小值/平均值/最大值。 (旧版支持)。
-
-t timelimit
- 用于基准测试的最大秒数。这意味着内部为
-n 50000
。使用它在固定的总时间内对服务器进行基准测试。默认情况下没有时间限制。
- 用于基准测试的最大秒数。这意味着内部为
-
-T content-type
- 用于 POST/PUT 数据的 Content TypeHeaders,例如
application/x-www-form-urlencoded
。默认值为text/plain
。
- 用于 POST/PUT 数据的 Content TypeHeaders,例如
-
-u PUT-file
- 包含数据到 PUT 的文件。记住还要设置
-T
。
- 包含数据到 PUT 的文件。记住还要设置
-
-v verbosity
- 设置详细级别-
4
及以上将在标题上打印信息,3
及以上将在打印响应代码(404、200 等),2
及以上将打印警告和信息。
- 设置详细级别-
-
-V
- 显示版本号并退出。
-
-w
- 在 HTML 表格中打印出结果。默认表是两列宽,带有白色背景。
-
-x <table>-attributes
- 用作
<table>
属性的字符串。属性插入<table here >
。
- 用作
-
-X proxy[:port]
- 使用代理服务器处理请求。
-
-y <tr>-attributes
- 用作
<tr>
属性的字符串。
- 用作
-
-z <td>-attributes
- 用作
<td>
属性的字符串。
- 用作
-
-Z ciphersuite
- 指定 SSL/TLS 密码套件(请参阅 openssl 密码)
Output
以下列表描述了ab
返回的值:
-
Server Software
- 在第一个成功响应的服务器 HTTP Headers 中返回的值(如果有)。这包括从头到头的所有字符,从十进制值到 32(最值得注意的是:空格或 CR/LF)被检测到。
-
Server Hostname
- 命令行中提供的 DNS 或 IP 地址
-
Server Port
- ab 连接到的端口。如果在命令行上未提供任何端口,则对于 HTTP,默认为 80;对于 HTTP,默认为 443.
-
SSL/TLS Protocol
- Client 端和服务器之间协商的协议参数。仅当使用 SSL 时才打印。
-
Document Path
- 从命令行字符串解析请求 URI。
-
Document Length
- 这是第一个成功返回的文档的大小(以字节为单位)。如果在测试过程中文档长度发生变化,则将响应视为错误。
-
Concurrency Level
- 测试期间使用的并发 Client 端数
-
测试时间
- 这是从创建第一个套接字连接到接收到最后一个响应的时间。
-
Complete requests
- 收到成功回复的数量
-
Failed requests
- 被视为失败的请求数。如果数字大于零,则将打印另一行,显示由于连接,读取,内容长度错误或异常而失败的请求数。
-
Write errors
- 写入期间失败的错误数(管道断开)。
-
Non-2xx responses
- 不在 200 系列响应代码中的响应数。如果所有响应均为 200,则不会打印此字段。
-
Keep-Alive requests
- 导致保持活动请求的连接数
-
寄件总数
- 如果配置为在测试过程中发送数据,则这是测试期间发送的字节总数。如果测试未包含要发送的正文,则将忽略此字段。
-
Total transferred
- 从服务器接收的字节总数。此数字本质上是通过网络发送的字节数。
-
HTML transferred
- 从服务器接收的文档字节总数。此数字不包括 HTTP Headers 中接收的字节
-
每秒请求
- 这是每秒的请求数。该值是请求数除以总时间的结果
-
每个请求的时间
- 每个请求花费的平均时间。第一个值使用公式
concurrency * timetaken * 1000 / done
计算,而第二个值使用公式timetaken * 1000 / done
计算
- 每个请求花费的平均时间。第一个值使用公式
-
Transfer rate
- 根据公式
totalread / 1024 / timetaken
计算出的转移率
- 根据公式
Bugs
有各种固定长度的静态声明的缓冲区。结合命令行参数的延迟解析,服务器和其他外部 Importing 的响应 Headers,这可能会给您带来麻烦。
它没有完全实现 HTTP/1.x。仅接受某些“预期”形式的回复。 strstr(3)
的大量使用显示在配置文件的顶部,这可能表示性能问题; 即,您将衡量ab
的性能而不是服务器的性能。