Web性能压力测试工具之ApacheBench(ab)详解
2016-05-14 18:36
781 查看
1、简介
ApacheBench 是apache中自带的一个指令列程式,专门用来执行网站服务器的运行效能,特别是针对Apache 网站服务器。这原本是用来检测 Apache 网站服务器能够提供的效能,特别是可以看出Apache能提供每秒能送出多少网页,常用来做网站性能压力测试。网站性能压力测试是性能调优过程中必不可少的一环。只有让服务器处在高压情况下才能真正体现出各种设置所暴露的问题。
2、原理
ab命令会创建很多的并发访问线程,模拟多个访问者同时对某一URL地址进行访问。它的测试目标是基于URL的,因此,既可以用来测试Apache的负载压力,也可以测试nginx、lighthttp、tomcat、IIS等其它Web服务器的压力。ab命令对发出负载的计算机要求很低,既不会占用很高CPU,也不会占用很多内存,但却会给目标服务器造成巨大的负载,其原理类似CC攻击。自己测试使用也须注意,否则一次上太多的负载,可能造成目标服务器因资源耗完,严重时甚至导致死机。
3、安装
方法一:安装apache时会自带安装ab工具;方法二:使用yum安装
yum install httpd-tools
4、参数说明
[root@localhost python]# ab ab: wrong number of arguments Usage: ab [options] [http[s]://]hostname[:port]/path Options are: -n requests Number of requests to perform (要执行的请求校验次数。默认请求一次,请求一次的结果不能代表校验结果,不准确。) -c concurrency Number of multiple requests to make (并发数,同一时间有多少强求发出去,默认是1) -t timelimit Seconds to max. wait for responses (校验花费的最大时间,内部设置-n 50000 次。使用这个选项在特定时间内测试。默认不开启) -b windowsize Size of TCP send/receive buffer, in bytes (发送和接收的buffer大小,单位是 bytes) -p postfile File containing data to POST. Remember also to set -T(包含POST数据文件) -u putfile File containing data to PUT. Remember also to set -T (包含PUT数据文件) -T content-type Content-type header for POSTing, eg. 'application/x-www-form-urlencoded' Default is 'text/plain' -v verbosity How much troubleshooting info to print (设置输出等级, 4 输出头信息,3 输出响应码(404,200) 2 输出警告和信息) -w Print out results in HTML tables (输出结果到html里的table,默认两列,白色背景) -i Use HEAD instead of GET (get请求中使用head信息) -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) (使用用户cookie信息) -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. -g filename Output collected data to gnuplot format file. 写所有有用的信息到TSV(Tab separate values)文件,可以轻松导入Excel等里面,label在文件第一行) -e filename Output CSV file with percentages served 写一个逗号分隔的CSV文件,包含每个百分比(from 1% to 100%)服务器执行的时间(毫秒),这个文件一般比'gunplot'有用 -r Don't exit on socket receive errors. (在socket错误的时候不退出) -h Display usage information (this message) -Z ciphersuite Specify SSL/TLS cipher suite (See openssl ciphers) -f protocol Specify SSL/TLS protocol (SSL2, SSL3, TLS1, or ALL) (指定 SSL/TLS 协议 (SSL2, SSL3, TLS1, or ALL).)
5、基本使用实例
并发10,请求100ab -n100 -c10 http://www.baidu.com
备注:如果请求的url较长,可以用单引号把参数括起
请求中带cookie
ab -n100 -c10 -C 'BAIDUID=0538442B4178B209111B1E72875AFB93:FG=1; BIDUPSID=0538442B4178B209111B1E72875AFB93; PSTM=1462847291; BD_HOME=0; H_PS_PSSID=18880_1422_17758_18282_19805_19559_19808_19842_19902_19860_15939_12263; BD_UPN=12314753; BD_LAST_QID=10077090155228940401' 'http://www.baidu.com'
备注:如果请求的cookie较长,可以用单引号把参数括起来
结果以html的形式输出
ab -n100 -c10 -w http://www.baidu.com
输出结果展示如下所以的html代码,把下列代码嵌入到一个html页面中,就可以在html页面中看到页面展示
<p> This is ApacheBench, Version 2.3 <i><$Revision: 655654 $></i><br> Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/<br> Licensed to The Apache Software Foundation, http://www.apache.org/<br> </p> <p> ..done <table > <tr ><th colspan=2 bgcolor=white>Server Software:</th><td colspan=2 bgcolor=white>nginx</td></tr> <tr ><th colspan=2 bgcolor=white>Server Hostname:</th><td colspan=2 bgcolor=white>xxx.xx.com</td></tr> <tr ><th colspan=2 bgcolor=white>Server Port:</th><td colspan=2 bgcolor=white>80</td></tr> <tr ><th colspan=2 bgcolor=white>Document Path:</th><td colspan=2 bgcolor=white>/xx/xxx</td></tr> <tr ><th colspan=2 bgcolor=white>Document Length:</th><td colspan=2 bgcolor=white>117946 bytes</td></tr> <tr ><th colspan=2 bgcolor=white>Concurrency Level:</th><td colspan=2 bgcolor=white>10</td></tr> <tr ><th colspan=2 bgcolor=white>Time taken for tests:</th><td colspan=2 bgcolor=white>3.984 seconds</td></tr> <tr ><th colspan=2 bgcolor=white>Complete requests:</th><td colspan=2 bgcolor=white>100</td></tr> <tr ><th colspan=2 bgcolor=white>Failed requests:</th><td colspan=2 bgcolor=white>1</td></tr> <tr ><td colspan=4 bgcolor=white > (Connect: 0, Length: 1, Exceptions: 0)</td></tr> <tr ><th colspan=2 bgcolor=white>Total transferred:</th><td colspan=2 bgcolor=white>11873961 bytes</td></tr> <tr ><th colspan=2 bgcolor=white>HTML transferred:</th><td colspan=2 bgcolor=white>11794561 bytes</td></tr> <tr ><th colspan=2 bgcolor=white>Requests per second:</th><td colspan=2 bgcolor=white>25098.85</td></tr> <tr ><th colspan=2 bgcolor=white>Transfer rate:</th><td colspan=2 bgcolor=white>2980227.88 kb/s received</td></tr> <tr ><th bgcolor=white colspan=4>Connnection Times (ms)</th></tr> <tr ><th bgcolor=white> </th> <th bgcolor=white>min</th> <th bgcolor=white>avg</th> <th bgcolor=white>max</th></tr> <tr ><th bgcolor=white>Connect:</th><td bgcolor=white> 1</td><td bgcolor=white> 2</td><td bgcolor=white> 18</td></tr> <tr ><th bgcolor=white>Processing:</th><td bgcolor=white> 111</td><td bgcolor=white> 373</td><td bgcolor=white> 501</td></tr> <tr ><th bgcolor=white>Total:</th><td bgcolor=white> 112</td><td bgcolor=white> 375</td><td bgcolor=white> 519</td></tr> </table>
html页面展示结果如下
<pre>
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/ ..done
Server Software: nginx
Server Hostname: xxx.xx.com
Server Port: 80
Document Path: /xx/xxx
Document Length: 117946 bytes
Concurrency Level: 10
Time taken for tests: 3.984 seconds
Complete requests: 100
Failed requests: 1
(Connect: 0, Length: 1, Exceptions: 0)
Total transferred: 11873961 bytes
HTML transferred: 11794561 bytes
Requests per second: 25098.85
Transfer rate: 2980227.88 kb/s received
Connnection Times (ms)
min avg max
Connect: 1 2 18
Processing: 111 373 501
Total: 112 375 519
</pre>
把所有请求中的相应时间记录下来并展示到csv文件(excel可以直接打开)中
ab -n100 -c10 -e result.csv http://www.baidu.com
6、ab展示结果说明
# ab版本说明 This is ApacheBench, Version 2.3 <$Revision: 655654 $> Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/ Benchmarking xxx.xx.com (be patient).....done Server Software: nginx Server Hostname: xxx.xx.com Server Port: 80 Document Path: /xx/xxx Document Length: 117946 bytes (测试页面大小) Concurrency Level: 10 (并发数) Time taken for tests: 0.590 seconds (全过程耗时) Complete requests: 10 (完成请求数) Failed requests: 0 (失败的请求数) Write errors: 0 Total transferred: 1187400 bytes (整个过程中的网络传输量 ) HTML transferred: 1179460 bytes (整个过程中的HTML内容传输量 ) Requests per second: 16.96 [#/sec] (mean) (QPS/TPS) Time per request: 589.700 [ms] (mean) (平均请求时间) Time per request: 58.970 [ms] (mean, across all concurrent requests) (每个连接请求实际运行时间的平均值 ) Transfer rate: 1966.37 [Kbytes/sec] received (平均每秒网络上的流量) Connection Times (ms) min mean[+/-sd] median max Connect: 3 5 1.0 5 6 Processing: 115 270 130.9 292 468 Waiting: 110 266 130.8 288 463 Total: 120 275 131.7 297 474 Percentage of the requests served within a certain time (ms) 50% 297 66% 328 75% 389 80% 445 90% 474 95% 474 98% 474 99% 474 100% 474 (longest request) 表示小于某一时间的请求数在全过程中的占比
7、需要重点关注的指标
完成请求数失败请求数 ==> 失败的不能太多
并发数
平均请求时间 ==> 一般同机房下不超过200ms
QPS ==> 一般用这个参数评估接口的性能,同并发下,QPS越大,性能越好
90%的请求的最大响应时间 ==> 一般同机房下不超过200ms
相关文章推荐
- Apache Isis 1.4.0 发布,领域驱动开发框架
- Java IO与NIO的一些文件拷贝测试
- RH436 Day3 课后总结
- Linux快速构建apache web服务器
- Awstats处理多apache日志
- 安装perl模块小窍门
- Apache静态编译与动态编译的区别
- PHP+Apache在Windows 9x下的安装和配置
- Apache服务器配置全攻略
- Apache Web让JSP“动”起来
- Linux Apache+MySQL+PHP
- 建立Apache+PHP+MySQL数据库驱动的动态网站
- 推荐六款WEB上传组件性能测试与比较第1/10页
- apache 环境下 php 的配置注意事项
- C#代码性能测试类(简单实用)
- 在RedHat下安装apache jserv 1.1.2方法
- windows8.1下Apache+Php+MySQL配置步骤
- windows中PHP5.2.14以及apache2.2.16安装配置方法第1/2页
- 在Windows XP下安装Apache+MySQL+PHP环境
- asp 性能测试报告 学习asp朋友需要了解的东西