内容:Apache中的ab命令介绍。
ab是Apache HTTP服务器的基准测试工具,用于对Apache HTTP服务器进行基准测试。目的就是为了让你对当前的Web Server的性能有个印象。尤其显示了当前的Web Server每秒能处理的请求数。
ab属于httpd软件包。
命令行语法
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
如果测试时,发送了数据,该字段显示发出的数据的总字节数。否则不会显示该字段。
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