使用:
在 Windows 系统下,打开 cmd 命令行窗口,定位到 apache 安装目录的 bin 目录下
cd C:\XXX\Apache\bin
键入命令: ab -n 800 -c 800 http://www.baidu.com
c 800 即:每次并发 800 个
n 800 即: 共发送 800 个请求
ab -t 60 -c 100 http://www.baidu.com
在 60 秒内发请求,一次 100 个请求。
参数的的请求
ab -t 60 -c 100 -T "application/x-www-form-urlencoded" p p.txt “http://www.baidu.com"
p.txt 是和 ab.exe 在一个目录 p.txt 中可以写参数,如 p=wdp&fq=78, 要注意编码问题
参数中的三种形式
application/x-www-form-urlencoded (默认值)
就是设置表单传输的编码,典型的 post 请求
multipart/form-data.
用来指定传输数据的特殊类型的,主要就是我们上传的非文本的内容,比如图片,mp3,文件等等
text/plain . 是纯文本传输的意思
结果分析:
ab -n 100 -c 100 -p p.txt -T application/x-www-form-urlencoded "http://www.baidu.com"
This is ApacheBench, Version 2.3 <$Revision: 1748469 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking apiv2.aligogo.in (be patient).....done
Server Software: nginx/1.16.0
Server Hostname: apiv2.aligogo.in
Server Port: 80
Document Path: /Api/getOptimal //测试的地址
Document Length: 51 bytes //返回大小
Concurrency Level: 100 //测试的并发数
Time taken for tests: 4.076 seconds //总耗时
Complete requests: 100 //完成的请求数量
Failed requests: 0 //失败的请求数量
Total transferred: 21400 bytes //整个过程中的网络传输量
Total body sent: 92400 //不清楚,没找到相关说明
HTML transferred: 5100 bytes //测试过程中产生的HTML传输量
Requests per second: 24.53 [#/sec] (mean) //表示服务器吞吐量,每秒事务数,括号中的 mean 表示这是一个平均值
Time per request: 4076.348 [ms] (mean) //表示用户请求的平均响应时间,后面括号中的mean表示这是一个平均值
Time per request: 40.763 [ms] (mean, across all concurrent requests) //表示服务器请求平均处理时间,即实际运行时间的平均值
Transfer rate: 5.13 [Kbytes/sec] received
22.14 kb/s sent
27.26 kb/s total
//表示这些请求在单位时间内从服务器获取的数据长度,可以帮助排除是否存在网络流量过大导致响应时间延长的问题
Connection Times (ms)
min mean[+/-sd] median max //min最小值、mean平均值、[+/-sd]方差、median中位数、maxz最大值
Connect: 0 31 300.0 1 3000 //socket链路建立消耗,代表网络状况好
Processing: 427 1908 1191.8 3043 3086 //写入缓冲区消耗+链路消耗+服务器消耗
Waiting: 427 1908 1191.8 3042 3086 //写入缓冲区消耗+链路消耗+服务器消耗+读取数据消耗
Total: 428 1939 1192.6 3045 3454 //单个事务总时间
Percentage of the requests served within a certain time (ms)
50% 3045
66% 3059
75% 3067
80% 3071
90% 3081
95% 3084
98% 3087
99% 3454
100% 3454 (longest request)
//整个场景中所有请求的响应情况。在场景中每个请求都有一个响应时间,其中50%的用户响应时间小于3045毫秒,66%的用户响应时间小于3059毫秒,最大的响应时间小于 3454 毫秒
重点关注
- ab 判断成功与否知识判断 2xx 响应码,不接收服务器的返回值
- ab 命令在一般系统上面做测试时候,一般并发不能超过 1024 个,其实是因为因为系统限制每个进程打开的最大文件数为 1024,可以用 ulimit -a 来查看
- n 可以指定最大请求数,但是不能超过 50000 个
- Time per request 是关注点
其他参数说明
Usage: ab [options] [http[s]://]hostname[:port]/path用法:ab [选项] 地址
选项:
Options are:
-n requests #执行的请求数,即一共发起多少请求。
-c concurrency #请求并发数。
-t timelimit #测试所进行的最大秒数。其内部隐含值是-n 50000,它可以使对服务器的测试限制在一个固定的总时间以内。默认时,没有时间限制。
-s timeout #指定每个请求的超时时间,默认是30秒。
-b windowsize #指定tcp窗口的大小,单位是字节。
-B address #指定在发起连接时绑定的ip地址是什么。
-p postfile #指定要POST的文件,同时要设置-T参数。
-u putfile #指定要PUT的文件,同时要设置-T参数。
-T content-type #指定使用POST或PUT上传文本时的文本类型,默认是'text/plain'。
-v verbosity #设置详细模式等级。
-w #将结果输出到html的表中。
-i #使用HEAD方式代替GET发起请求。
-y attributes #以表格方式输出时,设置html表格tr属性。
-z attributes #以表格方式输出时,设置html表格th或td属性。
-C attribute #添加cookie,比如'Apache=1234'。(可重复)
-H attribute #为请求追加一个额外的头部,比如'Accept-Encoding: gzip'。(可重复)
-A attribute #对服务器提供BASIC认证信任。用户名和密码由一个:隔开,并以base64编码形式发送。无论服务器是否需要(即,是否发送了401认证需求代码),此字符串都会被发送。
-P attribute #对一个中转代理提供BASIC认证信任。用户名和密码由一个:隔开,并以base64编码形式发送。无论服务器是否需要(即, 是否发送了401认证需求代码),此字符串都会被发送。
-X proxy:port #指定代理服务器的IP和端口。
-V #打印版本信息。
-k #启用HTTP KeepAlive功能,即在一个HTTP会话中执行多个请求。默认时,不启用KeepAlive功能。
-d #不显示"percentage served within XX [ms] table"的消息(为以前的版本提供支持)。
-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 #输出帮助信息