基准测试工具(ab)
ab是什么? ab是基于命令行的工具,均可运行在windows、linux平台下。 为什么选用这个工具? 易于使用,输入少量命令选项,即可得出结果,同时易于安装。
安装ab
win:如果本地有apache的开发环境,那么ab默认在apache目录下的bin目录下,打开bin目录可以看到 linux:直接yum install httpd-tools,安装即可
简单上手
直接敲入下面代码(注意切换ab所在的目录) -c 10代表并发数是10 -n 10总共进行100次访问 后面接要访问的网址,切记不可缺少http:// - D:\phpStudy\Apache\bin>ab -c 10 -n 1000 http://example.com/phpinfo.php
待ab自己跑一下,得出下面结果 - #ab工具的描述,注意其中的版本号
- This is ApacheBench, Version 2.3 <$Revision: 1604373 $>
- Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
- Licensed to The Apache Software Foundation, http://www.apache.org/
- #测试结果,共测试1000次,每100次显示访问进度,访问的网站是example.com
- Benchmarking example.com (be patient)
- Completed 100 requests
- Completed 200 requests
- Completed 300 requests
- Completed 400 requests
- Completed 500 requests
- Completed 600 requests
- Completed 700 requests
- Completed 800 requests
- Completed 900 requests
- Completed 1000 requests
- Finished 1000 requests
- #服务器的信息
- Server Software: nginx/1.6.2 #服务器web软件
- Server Hostname: example.com #主机地址
- Server Port: 80 #访问端口
- #文档信息
- Document Path: /phpinfo.php #访问的文档
- Document Length: 94804 bytes #返回结果大小字节数(包含html,js,css,图片及响应中的所有内容字节数总和)
- #链接信息
- Concurrency Level: 10 #并发数,-c 10 设置了10个并发
- Time taken for tests: 7.498 seconds #总耗时,单位秒
- Complete requests: 1000 #总共请求中已完成的请求总数的和
- Failed requests: 219 #失败的请求数总和
- (Connect: 0, Receive: 0, Length: 219, Exceptions: 0)
- Non-2xx responses: 9 #未收到2xx系列成功的请求总数
- Total transferred: 94135779 bytes #整个请求总数中响应总数距的总大小字节数,包含头信息
- HTML transferred: 93952076 bytes #整个请求总数中正文内容的总大小字节
- Requests per second: 133.36 [#/sec] (mean) #每秒支持的并发数,这里是每秒支持133.36个并发
- Time per request: 74.984 [ms] (mean) #完成一个请求的总耗时
- Time per request: 7.498 [ms] (mean, across all concurrent requests) #完成所有并发请求中一个请求的总耗时
- Transfer rate: 12259.83 [Kbytes/sec] received #每秒收到的字节总数(KB)
- #测试的时间结果数据,留意Total一项,10个并发的情况下,完成一个请求,最小耗时(min)9毫秒,最大耗时(max)146毫秒
- Connection Times (ms)
- min mean[+/-sd] median max
- Connect: 0 0 0.7 0 20
- Processing: 9 74 22.2 68 146
- Waiting: 6 73 22.1 67 143
- Total: 9 74 22.2 68 146
- #完成请求百分比,例如第一项,50% 68,代表一半的请求在68毫秒内完成,95% 129,代表1000的请求里,百分之九十八的请求在129毫秒里完成
- Percentage of the requests served within a certain time (ms)
- 50% 68
- 66% 78
- 75% 86
- 80% 92
- 90% 109
- 95% 122
- 98% 129
- 99% 133
- 100% 146 (longest request)
ab选项
输入下面命令得到ab帮助文档,该帮助文档,分别说明了用法和命令选项的含义 - D:\phpStudy\Apache\bin>ab -h
ab帮助文档的输出 - Usage: ab [options] [http://]hostname[:port]/path
- Options are:
- -n requests Number of requests to perform
- -c concurrency Number of multiple requests to make at a time
- -t timelimit Seconds to max. to spend on benchmarking
- This implies -n 50000
- -s timeout Seconds to max. wait for each response
- Default is 30 seconds
- -b windowsize Size of TCP send/receive buffer, in bytes
- -B address Address to bind to when making outgoing connections
- -p postfile File containing data to POST. Remember also to set -T
- -u putfile File containing data to PUT. Remember also to set -T
- -T content-type Content-type header to use for POST/PUT data, eg.
- 'application/x-www-form-urlencoded'
- Default is 'text/plain'
- -v verbosity How much troubleshooting info to print
- -w Print out results in HTML tables
- -i Use HEAD instead of GET
- -x attributes String to insert as table attributes
- -y attributes String to insert as tr attributes
- -z attributes String to insert as td or th attributes
- -C attribute Add cookie, eg. 'Apache=1234'. (repeatable)
- -H attribute Add Arbitrary header line, eg. 'Accept-Encoding: gzip'
- Inserted after all normal header lines. (repeatable)
- -A attribute Add Basic WWW Authentication, the attributes
- are a colon separated username and password.
- -P attribute Add Basic Proxy Authentication, the attributes
- are a colon separated username and password.
- -X proxy:port Proxyserver and port number to use
- -V Print version number and exit
- -k Use HTTP KeepAlive feature
- -d Do not show percentiles served table.
- -S Do not show confidence estimators and warnings.
- -q Do not show progress when doing more than 150 requests
- -l Accept variable document length (use this for dynamic pages)
- -g filename Output collected data to gnuplot format file.
- -e filename Output CSV file with percentages served
- -r Don't exit on socket receive errors.
- -m method Method name
- -h Display usage information (this message)
英文看不懂,附上中文解释,网上抄的,我没试过 - -n 即requests,用于指定压力测试总共的执行次数。
- -c 即concurrency,用于指定压力测试的并发数。
- -t 即timelimit,等待响应的最大时间(单位:秒)。
- -b 即windowsize,TCP发送/接收的缓冲大小(单位:字节)。
- -p 即postfile,发送POST请求时需要上传的文件,此外还必须设置-T参数。
- -u 即putfile,发送PUT请求时需要上传的文件,此外还必须设置-T参数。
- -T 即content-type,用于设置Content-Type请求头信息,例如:application/x-www-form-urlencoded,默认值为text/plain。
- -v 即verbosity,指定打印帮助信息的冗余级别。
- -w 以HTML表格形式打印结果。
- -i 使用HEAD请求代替GET请求。
- -x 插入字符串作为table标签的属性。
- -y 插入字符串作为tr标签的属性。
- -z 插入字符串作为td标签的属性。
- -C 添加cookie信息,例如:"Apache=1234"(可以重复该参数选项以添加多个)。
- -H 添加任意的请求头,例如:"Accept-Encoding: gzip",请求头将会添加在现有的多个请求头之后(可以重复该参数选项以添加多个)。
- -A 添加一个基本的网络认证信息,用户名和密码之间用英文冒号隔开。
- -P 添加一个基本的代理认证信息,用户名和密码之间用英文冒号隔开。
- -X 指定使用的代理服务器和端口号,例如:"126.10.10.3:88"。
- -V 打印版本号并退出。
- -k 使用HTTP的KeepAlive特性。
- -k 使用HTTP的KeepAlive特性。
- -d 不显示百分比。
- -S 不显示预估和警告信息。
- -g 输出结果信息到gnuplot格式的文件中。
- -e 输出结果信息到CSV格式的文件中。
- -r 指定接收到错误信息时不退出程序。
- -h 显示用法信息,其实就是ab -help。
一般用-n,-c,-t就好了 -n请求总数 -c并发数 -t指定秒数内的并发数
-t的用法说一下,下面的意思是在20秒内并发数10个访问 - D:\phpStudy\Apache\bin> ab -c 10 -t 20 http://example.com/phpinfo.php
- This is ApacheBench, Version 2.3 <$Revision: 1604373 $>
- Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
- Licensed to The Apache Software Foundation, http://www.apache.org/
- Benchmarking example.com (be patient)
- Finished 3011 requests
- Server Software: nginx/1.6.2
- Server Hostname: example.com
- Server Port: 80
- Document Path: /phpinfo.php
- Document Length: 94804 bytes
- Concurrency Level: 10
- Time taken for tests: 20.006 seconds
- Complete requests: 3011
- Failed requests: 495
- (Connect: 0, Receive: 0, Length: 495, Exceptions: 0)
- Non-2xx responses: 54
- Total transferred: 280896464 bytes
- HTML transferred: 280344222 bytes
- Requests per second: 150.50 [#/sec] (mean)
- Time per request: 66.444 [ms] (mean)
- Time per request: 6.644 [ms] (mean, across all concurrent requests)
- Transfer rate: 13711.44 [Kbytes/sec] received
- Connection Times (ms)
- min mean[+/-sd] median max
- Connect: 0 0 0.5 0 10
- Processing: 6 66 17.6 63 203
- Waiting: 5 64 17.3 61 202
- Total: 6 66 17.6 63 203
- Percentage of the requests served within a certain time (ms)
- 50% 63
- 66% 69
- 75% 72
- 80% 75
- 90% 82
- 95% 92
- 98% 113
- 99% 125
- 100% 203 (longest request)
特别说明:如果访问http://www.example.com/,没有指定特定文件,记得要加最后的那个/,一定要加!!!否则可能会出现访问不到的情况!!!
可能会影响基准测试的情况
地理位置和网络问题
响应文件大小
代码的复杂度
浏览器解析
Web服务器的配置
地理位置和网络问题
如果Web服务器存放在境外,那么我们从本地访问境外的网站,可想而知,经过的路由器结点,服务器结点,再通过太平洋海底的光缆,而后再访问到Web服务器,Web服务器处理后,再继续海底光缆,各个服务器、路由结点的跳转返回,这样的话肯定会影响到测试结果(我的建议是,直接在服务器上进行ab测试)
响应文件大小
假如发送一个3MB的页面,服务器网卡会把3MB的数据拆分成单个很小的数据包,传输过程中,只有一个数据包损坏或丢失,则会重新发送所有的数据包,所以发送的包越小越好,同时,越小的数据传输,越快传输到用户的机器上。
代码的复杂度
代码的复杂度即是对业务逻辑复杂的处理,还有对文件调用、数据库访问、远端API接口的调用等等都会影响处理时间
浏览器解析
每个浏览器都有自己对js、css、html的处理方法,想想IE8以下和chrome的区别即可知道
Web服务器设置
一般Web服务器安装后,简单设置,即可实现Web服务(开箱即用),但是这样的设置没有发挥Web服务器的最大性能,需要资深的工程师对服务器进行相关配置,使之发挥最大性能,这里简单实用Keep-Alive说明。 Keep-Alive的作用就是,Web服务器打开特定数量的连接,让这些连接处于打开状态,使之能快速处理传入的请求,这样就不会为每一个传入的请求打开一个连接然后处理请求,减少服务器的处理请求的进程数,从而增加并发数。 在ab中使用-k进行测试,例如下面这句 - #-k,允许服务器保存5个并发连接处于打开并允许的状态,让其他请求快速处理,减少创建新请求的处理时间
- ab -c 5 -t 100 -k http://www.example.com/
|