配色: 字号:
Web压力测试工具之ApacheBench(ab)的使用详解
2015-03-23 | 阅:  转:  |  分享 
  
Web压力测试工具之ApacheBench(ab)的使用详解说明:网站的压力测试是服务器性能调优过程中必不可少。只有让服务器处在高压环境下才
能真正体现出各种服务器配置所暴露的问题。Apache中有个自带的ApacheBench(ab)程序,可以实现对Apache或其它类
型(如:Nginx、IIS)的服务器进行网站访问压力测试。ApacheBench(ab)命令的工作原理:ApacheBench(a
b)命令会创建很多的并发访问线程,模拟多个访问者同时对某一URL地址进行访问。它的测试目标是基于URL的,因此,既可以用来测试Ap
ache的负载压力,也可以测试nginx、lighthttp、tomcat、IIS等其它Web服务器的压力。ApacheBench
(ab)命令对发出负载的计算机要求很低,既不会占用很高CPU,也不会占用很多内存,但却会给目标服务器造成巨大的负载,其原理类似CC
攻击。测试时需要特别注意,否则可能造成目标服务器因资源耗完,甚至导致死机。ApacheBench(ab)命令的参数说明:12345
67891011121314151617181920212223242526272829303132333435363738394
0格式:ab[options][http://]hostname[:port]/path参数说明:-nrequestsNu
mberofrequeststoperform#在测试会话中所执行的请求个数(本次测试总共要访问页面的次数)。默认时,仅执
行一个请求。-cconcurrencyNumberofmultiplerequeststomake#一次产生的请求个
数(并发数)。默认是一次一个。-ttimelimitSecondstomax.waitforresponses#测试
所进行的最大秒数。其内部默认值是-n50000。它可以使对服务器的测试限制在一个固定的总时间以内。默认时,没有时间限制。-pp
ostfileFilecontainingdatatoPOST#包含了需要POST的数据的文件,文件格式如“p1=1&p
2=2”.使用方法是-p111.txt。(配合-T)-Tcontent-typeContent-typeheader
forPOSTing#POST数据所使用的Content-type头信息,如-T“application/x-www-fo
rm-urlencoded”。(配合-p)-vverbosityHowmuchtroubleshootinginfo
toprint#设置显示信息的详细程度–4或更大值会显示头信息,3或更大值可以显示响应代码(404,200等),2或
更大值可以显示警告和其他信息。-V显示版本号并退出。-wPrintoutresultsinHTMLtables#以
HTML表的格式输出结果。默认时,它是白色背景的两列宽度的一张表。-iUseHEADinsteadofGET#执行HEA
D请求,而不是GET。-xattributesStringtoinsertastableattributes-ya
ttributesStringtoinsertastrattributes-zattributesStringt
oinsertastdorthattributes-CattributeAddcookie,eg.-C“c
1=1234,c2=2,c3=3″(repeatable)#-Ccookie-name=value对请求附加一个Cookie
:行。其典型形式是name=value的一个参数对。此参数可以重复,用逗号分割。#提示:可以借助session实现原理传递JS
ESSIONID参数,实现保持会话的功能,如-C”c1=1234,c2=2,c3=3,JSESSIONID=FF056CD
16DA9D71CB131C1D56F0319F8″。-HattributeAddArbitraryheaderlin
e,eg.‘Accept-Encoding:gzip’Insertedafterallnormalheaderl
ines.(repeatable)-AattributeAddBasicWWWAuthentication,the
attributesareacolonseparatedusernameandpassword.-Pattribut
eAddBasicProxyAuthentication,theattributesareacolonsepar
atedusernameandpassword.#-Pproxy-auth-username:password对一个中转
代理提供BASIC认证信任。用户名和密码由一个:隔开,并以base64编码形式发送。无论服务器是否需要(即,是否发送了401认证
需求代码),此字符串都会被发送。-Xproxy:portProxyserverandportnumbertouse-
VPrintversionnumberandexit-kUseHTTPKeepAlivefeature-dDo
notshowpercentilesservedtable.-SDonotshowconfidenceesti
matorsandwarnings.-gfilenameOutputcollecteddatatognuplot
formatfile.-efilenameOutputCSVfilewithpercentagesserved-h
Displayusageinformation(thismessage)#-attributes设置属性的字符串.缺
陷程序中有各种静态声明的固定长度的缓冲区。另外,对命令行参数、服务器的响应头和其他外部输入的解析也很简单,这可能会有不良后果。它没
有完整地实现HTTP/1.x;仅接受某些’预想’的响应格式。strstr(3)的频繁使用可能会带来性能问题,即你可能是在测试
ab而不是服务器的性能。参数很多,一般我们用-c和-n参数就可以了。例如:#ab-c5000-n600?http
://www.samgod.com/index.phphttp://www.samgod.com/index.phpApacheB
ench(ab)命令的用法详解:1、在Linux系统,一般安装好Apache后可以直接执行;#ab-n4000-c100
0http://www.samgod.com/2、如果是Win系统下,打开cmd命令行窗口,cd到apache安装目录的bin目
录下;说明:-n后面的4000代表总共发出4000个请求;-c后面的1000表示采用1000个并发(模拟1000个人同时访问),后
面的网址表示测试的目标URL。稍等一会得到类似如下显示结果:结果分析:ThisisApacheBench,Version2
.3Copyright1996AdamTwiss,ZeusTechnologyLtd,http://www.samg
od.com/LicensedtoTheApacheSoftwareFoundation,http://www.apa
che.org/?Benchmarking192.168.80.157(bepatient)Completed400re
questsCompleted800requestsCompleted1200requestsCompleted1600
requestsCompleted2000requestsCompleted2400requestsCompleted
2800requestsCompleted3200requestsCompleted3600requestsComple
ted4000requestsFinished4000requests?ServerSoftware:Apache/2
.2.15ServerHostname:192.168.80.157ServerPort:80?DocumentPath
:/phpinfo.php#测试的页面DocumentLength:50797bytes#页面大小?Concurrency
Level:1000#测试的并发数Timetakenfortests:11.846seconds#整个测试持续的时间
Completerequests:4000#完成的请求数量Failedrequests:0#失败的请求数量Writeer
rors:0Totaltransferred:204586997bytes#整个过程中的网络传输量HTMLtransfe
rred:203479961bytes#整个过程中的HTML内容传输量Requestspersecond:337.67
[#/sec](mean)#最重要的指标之一,相当于LR中的每秒事务数,后面括号中的mean表示这是一个平均值Timeper
request:2961.449[ms](mean)#最重要的指标之二,相当于LR中的平均事务响应时间,后面括号中的mean
表示这是一个平均值Timeperrequest:2.961[ms](mean,acrossallconcurren
trequests)#每个连接请求实际运行时间的平均值Transferrate:16866.07[Kbytes/sec]
received#平均每秒网络上的流量,可以帮助排除是否存在网络流量过大导致响应时间延长的问题ConnectionTimes(
ms)minmean[+/-sd]medianmaxConnect:04831773.5119052Process
ing:25561459.125511763Waiting:15151459.822011756Total:
13910392296.627511843#网络上消耗的时间的分解,各项数据的具体算法还不是很清楚?Percentage
oftherequestsservedwithinacertaintime(ms)50%27566%29875
%32880%37390%326095%907598%926799%11713100%11843(longest
request)#整个场景中所有请求的响应情况。在场景中每个请求都有一个响应时间,其中50%的用户响应时间小于275毫秒,66%的
用户响应时间小于298毫秒,最大的响应时间小于11843毫秒。对于并发请求,cpu实际上并不是同时处理的,而是按照每个请求获得的时
间片逐个轮转处理的,所以基本上第一个Timeperrequest时间约等于第二个Timeperrequest时间乘以并发请
求数。总结:在远程对web服务器进行压力测试,往往效果不理想(因为网络延时过大),建议使用内网的另一台或者多台服务器通过内网进行测
试,这样得出的数据,准确度会高很多。如果只有单独的一台服务器,可以直接本地测试,比远程测试效果要准确。测试过程中可能会出现以下错误
,及其原因12345678910111213###ab并发数不能大于请求数,会提示:ab:Cannotuseconcurr
encylevelgreaterthantotalnumberofrequests###请求数默认不能超过1024
个,会提示:socket:Toomanyopenfiles(24)可用ulimit-n命令修改,例如:ulimit-n8192(设置用户可以同时打开的最大文件数)。###并发数默认不能大于20000个,会提示:ab:InvalidConcurrency[Range0..20000]需要修改apache源代码support目录下ab.c文件,找到:#defineMAX_CONCURRENCY20000将宏定义的值改大,重新编译安装apache。###提示:apr_socket_recv:Connectionresetbypeer(104)网上说是apr-util有些问题,运行不太稳定,多试几次就好了。
献花(0)
+1
(本文系peijs520131...首藏)