「Apache Benchmark/ab」- Apache 基准测试

  CREATED BY JENKINSBOT

内容:Apache中的ab命令介绍。

ab是Apache HTTP服务器的基准测试工具,用于对Apache HTTP服务器进行基准测试。目的就是为了让你对当前的Web Server的性能有个印象。尤其显示了当前的Web Server每秒能处理的请求数。

ab属于httpd软件包。

命令行语法

ab [ -A auth-username:password ] [ -b windowsize ] [ -B local-address ] [ -c concurrency ] [ -C cookie-

name=value ] [ -d ] [ -e csv-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:pass‐

word ] [ -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

命令行选项

下面是ab命令支持的选项

用于帮助类信息

-h/-V

显示帮助/版本信息。

用于数据分析类

-e csv-file

包含了处理每个相应百分比的请求所需要(从1%到100%)的相应百分比的(以微妙为单位)时间
这通常比gnuplot文件有用,因为结果已经“二进制”了。

-g gnuplot-file

将所有测量值写为“gnuplot”或TSV(Tab分割)文件。该文件可以轻松地导入到Gnuplot,IDL,Mathematica,Igor甚至Excel等软件中。标签位于文件的第一行。

控制输出结果

-v verbosity

设置输出的详细等级。4+时打印标题;3+时打印响应代码(404,200等),2及以上打印警告和信息。

-w

在HTML表格中打印出结果。默认表是两列宽,带有白色背景

-x <table>-attributes

将字符串设置为table的标签。

-y <tr>-attributes

将字符串设置为tr的标签。

-z <td>-attributes

将字符串设置为td的标签。

请求设置类选项

-A auth-username:password

向server提供BASIC认证凭据。username和password使用冒号分割,以base64的形式发送。不管服务器需要都会发送认证字符串。关于BASIC认证凭据请阅读《HTTP权威指南》一书。

-b windowsize

TCP的发送/接收缓冲的大小。以byte为单位。

-B local-address

发送请求时使用的地址。

-c concurrency

同时发送的并发请求数。默认一次只发送一个请求。

-C cookie-name=value

设置Cookie。格式:name=value。
该参数可重复,即可以指定多个Cookie。

-d

不要显示“在XX[ms]表中服务的百分比”。(传统支持)。

-f protocol

指定SSL/TLS协议(SSL2,SSL3,TLS1,TLS1.1,TLS1.2,所有的)。
2.4.4及更高版本中提供TLS1.1和TLS1.2支持。

-H custom-header

附加额外的请求头。格式是典型的请求头格式,比如:“Accept-Encoding:zip / zop; 8bit”

-i

执行HEAD请求。

-k

启用HTTP KeepAlive特征,比如:在一个HTTP会话中发送多次请求。
默认是没有KeepAlive。

-l

在响应的长度不是常数的情况下不要报告错误。对于动态页面可能是有用的。2.4.7+可用。

-m HTTP-method

自定义HTTP方法。2.4.10+可用。

-n requests

总共要执行的请求数。如果未指定则只执行一次。

-p POST-file

POST-file中包含了要POST的数据。别忘了使用-T选项指定Content-type。

-u PUT-file

PUT-file包含了PUT发送的数据。别忘了设置-T来指定Content-type。

-P proxy-auth-username:password

向代理路由提供BASIC身份验证凭据。username和password使用冒号分割,并以base64的形式发送。无论代理是否要求认证,都会发送认证字符串。

-q

当处理超过150个请求时,ab每10%或100个请求输出进度计数。而-q会抑制这些消息。

-r

socket接受接收错误的时候不退出。

-s timeout

socket超时之前等待的最大秒数。默认值为30秒。2.4.4+支持。

-S

不要显示中位数和标准偏差值。当平均值和中位数是标准偏差的一倍或两倍以上时,不显示警告/错误信息。并默认为最小/平均值/最大值。(传统支持)。

-t timelimit

基准测试的最大秒数。这意味着内部的一个50000。使用它来在固定总时间内,对服务器进行基准测试。
默认情况下没有时间限制。

-T content-type

对POST/PUT指定Content-type头。如:application/x-www-form-urlencoded。默认为text/plain。

-X proxy[:port]

对请求使用代理服务器。

-Z ciphersuite

指定SSL/TLS加密套件

ab输出值的解释

Server Software

第一个成功响应的服务器HTTP头中返回值(如果有)。
包括头中的所有字符从开始到点,检测到十进制值为32(最值得注意的是:空格或CR/LF)的字符。

Server Hostname

命令行中给出的DNS或者IP地址

Server Port

连接的端口号。如果未指定,http为80,https为443。

SSL/TLS Protocol

client和server协商的协议参数。只有使用SSL时才会打印。

Document Path

从命令行中解析的请求URI。

Document Length

第一个成功响应的文档的字节数。如果在测试的过程中,文档的长度出现了变化,响应会被视为错误。

Concurrency Level

并发client数量。

Time taken for tests

测试的时长:从第一个socket建立到收到最后一个请求。

Complete requests

接收到的成功的响应数。

Failed requests

失败的请求数量。如果有失败的请求,会打印出由于连接、读取、不正确的文本长度、异常的数量。

Write errors

写时发生的错误数量。

Non-2xx responses

非200系列的响应码的数量。如果响应码为200不会打印该字段。

Keep-Alive requests

导致Keep-Alive请求的连接数。

Total body sent

如果测试时,发送了数据,该字段显示发出的数据的总字节数。否则不会显示该字段。

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.

Total transferred

从服务器接受的总字节数。这个数字本质上是通过“线”发送的字节数。

HTML transferred

从服务器接受到的文档字节数量。这个数量不包含HTTP头部。

Requests per second

每秒的请求数 = 请求数 / 总时间

Time per request

每个请求花费的时间。
第一个值通过公式: 并发 * 花费时间 * 1000 / done 来计算,而第二个值使用公式:花费时间 * 1000 / done 来计算。done表示完成的请求数。

Transfer rate

传输速率 = totalread / 1024 / timetaken

存在的BUGS

有各种静态声明的固定长度的缓冲区。结合”懒惰解析”命令行参数,来自服务器和其他外部输入的响应头,这可能会造成一些影响。

没有完全实现HTTP/1.x;只接受一些“预期”形式的响应。 在配置文件中显示出当大的strstr(3)的相使用,这可能表明性能问题;即衡量ab的性能而不是服务器的性能。

使用中的一些限制

ab只能针对单个URL进行测试,但是实际中的压力测试环境要求的应该更复杂。而这一点HTTP, HTTPS, SSL, TLS可以做到。

参考文献

man 1 ab
ab doc: https://httpd.apache.org/docs/2.4/programs/ab.html
ApacheBench Wiki: https://en.wikipedia.org/wiki/ApacheBench