参数
文档地址:https://httpd.apache.org/docs/2.0/programs/ab.html
ab [ -A auth-username:password ] [ -c concurrency ] [ -C cookie-name=value ]
[ -d ] [ -e csv-file ] [ -g gnuplot-file ] [ -h ] [ -H custom-header ]
[ -i ] [ -k ] [ -n requests ] [ -p POST-file ]
[ -P proxy-auth-username:password ] [ -q ] [ -s ] [ -S ] [ -t timelimit ]
[ -T content-type ] [ -v verbosity] [ -V ] [ -w ] [ -x <table>-attributes ]
[ -X proxy[:port] ] [ -y <tr>-attributes ] [ -z <td>-attributes ]
[http://]hostname[:port]/path
#服务器系统版本
[root@stache34 ~]# cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core)
#安装apache时会自动安装ab命令
#如果不想安装apache,只想安装ab命令只需安装 httpd-tools 包即可
yum -y install httpd-tools
#安装的是httpd-tools-2.4.6
[root@stache34 ~]# rpm -qa | grep httpd-tools
httpd-tools-2.4.6-97.el7.centos.2.x86_64
#ab命令版本
[root@stache34 ~]# ab -V
This is ApacheBench, Version 2.3 <$Revision: 1430300 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
[root@stache34 ~]# ab -h
Usage: ab [options] [http[s]://]hostname[:port]/path
Options are:
-n requests #在测试会话中所执行的请求总个数,默认仅执行一个请求
-c concurrency #每次请求的并发数,相当于同时模拟多少个人访问url,默认是一次一个
-t timelimit #测试所进行的最大秒数。其内部隐含值是-n 50000
#它可以使对服务器的测试限制在一个固定的总时间以内
-s timeout #等待每个响应的最大值,默认为30秒
-b windowsize #TCP 发送/接收缓冲区的大小,以字节为单位
-B address #进行传出连接时要绑定到的地址
-p postfile #包含要 POST 的数据的文件,记得还要设置 -T 参数
-u putfile #包含要 PUT 的数据的文件,记得还要设置-T 参数
-T content-type #POST/PUT 数据所使用的Content-type头信息
#例如:application/x-www-form-urlencoded 默认值:text/plain
-v verbosity #设置显示信息的详细程度 -4 或更大值会显示头信息
#3或更大值可以显示响应代码(404, 200等),2或更大值可以显示警告和其它信息
-w #以HTML表的格式输出结果,默认时,它是白色背景的两列宽度的一张表
-i #执行HEAD请求,而不是GET
-x attributes #以HTML表格格式输出结果时,给 table 标签设置的属性值
#如 -x 'sytle="width=500px"' 输出的html中table标签会加上该属性<table sytle="width=500px">
-y attributes #以HTML表格格式输出结果时,给 tr 标签设置的属性值
-z attributes #以HTML表格格式输出结果时,给 td 标签设置的属性值
-C attribute #对请求附加一个Cookie:行,形式为 name=value 的一个参数对,此参数可以重复
-H attribute #对请求附加额外的头信息,此参数的典型形式是一个有效的头信息行
#其中包含了以冒号分隔的字段和值的对 (如:"Accept-Encoding: zip/zop;8bit")
-A attribute #对服务器提供BASIC认证信任,用户名和密码由一个:隔开,并以base64编码形式发送
#无论服务器是否需要(即:是否发送了401认证需求代码)此字符串都会被发送
-P attribute #对一个中转代理提供BASIC认证信任,用户名和密码由一个:隔开,并以base64编码形式发送
#无论服务器是否需要(即:是否发送了401认证需求代码)此字符串都会被发送
-X proxy:port #对请求使用代理服务器
-V #显示版本号并退出
-k #启用 HTTP KeepAlive 功能,即在一个 HTTP 会话中执行多个请求,默认不启用 KeepAlive 功能
-d #不显示“XX [ms] 表内提供的百分比”(遗留支持)
-S #不显示中值和标准差值,当平均值和中值相差超过标准差的一倍或两倍时,
#也不显示警告或错误消息,默认会显示 min/avg/max 值(遗留支持)
-q #如果处理的请求数大于150,ab每处理大约10%或者100个请求时,会在stderr输出一个进度计数,此-q标记可以抑制这些信息
-g filename #把所有测试结果写入一个'gnuplot'或者TSV (以Tab分隔的)文件,
#此文件可以方便地导入到Gnuplot、IDL、Mathematica、Igor甚至Excel中,其中的第一行为标题
-e filename #产生一个以逗号分隔的(CSV)文件, 其中包含了处理每个相应百分比的请求所需要(从1%到100%)的相应百分比的(以微妙为单位)时间
#由于这种格式已经“二进制化”,所以比'gnuplot'格式更有用
-r #不要在套接字接收错误时退出
-h #显示帮助信息
-Z ciphersuite 指定 SSL/TLS 密码套件(请参阅 openssl 密码)
-f protocol 指定 SSL/TLS 协议(SSL2、SSL3、TLS1 或 ALL)
2.结果说明
Server Software: Apache/2.4.6 #服务器软件版本
Server Hostname: 192.168.176.30 #服务器主机名
Server Port: 80 #服务器端口
Document Path: /index.html #测试的页面
Document Length: 9 bytes #页面的字节数
Concurrency Level: 900 #请求的并发数,代表着访问的客户端数量
Time taken for tests: 0.489 seconds #整个测试花费的时间
Complete requests: 1000 #成功的请求数量
Failed requests: 0 #失败的请求数量
Write errors: 0
Total transferred: 267000 bytes #整个测试过程的总数据大小(包括header头信息等)
HTML transferred: 9000 bytes #整个测试过程HTML页面实际的字节数
Requests per second: 2045.81 [#/sec] (mean) #每秒处理的请求数,这是非常重要的参数,体现了服务器的吞吐量
#后面括号中的 mean 表示这是一个平均值
Time per request: 439.923 [ms] (mean) #平均请求响应时间,括号中的 mean 表示这是一个平均值
#每个请求的时间 0.489[毫秒],意思为在所有的并发请求每个请求实际运行时间的平均值
#由于对于并发请求 cpu 实际上并不是同时处理的,而是按照每个请求获得的时间片逐个轮转处理的
#所以基本上第一个 Time per request 时间约等于第二个 Time per request 时间乘以并发请求数
Time per request: 0.489 [ms] (mean, across all concurrent requests)
Transfer rate: 533.43 [Kbytes/sec] received #传输速率,平均每秒的流量
#可以帮助排除是否存在网络流量过大导致响应时间延长的问题
Connection Times (ms) #连接时间
min mean[+/-sd] median max #median中间
Connect: 0 17 11.8 21 34
Processing: 1 145 153.9 35 446
Waiting: 1 145 153.9 35 446
Total: 16 163 161.2 63 474
#connect连接、processing系统处理、waiting等待、总计,统计最大大小耗时
#min最小耗时,max最大耗时,mean平均值,[+/-sd]均方差(标准差,数值越大表示数据越分散,系统
#响应时间越不稳定),median中位数,表示一组数据中间的那个值
Percentage of the requests served within a certain time (ms)
50% 106
66% 109
75% 111
80% 114
90% 118
95% 154
98% 176
99% 195
100% 195 (longest request)
#第一行表示50%的请求是在106毫秒内完成的
3.示例
ab -n 1000 -c 2 -v -x -H "Authorization: test" "https://www.test.com/api/inspect/"