使用Apache ab工具对Apache服务器进行简单的压力测试
1.安裝ab命令
sudoapt-getinstallapache2-utils
2.ab命令参数说明
Usage:ab[options][http[s]://]hostname[:port]/path
Optionsare:
//总的请求数 -nrequestsNumberofrequeststoperform //一次同时并发的请求数总的请求数(n)=次数*一次并发数(c) -cconcurrencyNumberofmultiplerequeststomake
-nrequestsNumberofrequeststoperform
//在测试会话中所执行的请求个数(本次测试总共要访问页面的次数)。默认时,仅执行一个请求。
-cconcurrencyNumberofmultiplerequeststomake
//一次产生的请求个数(并发数)。默认是一次一个。
-ttimelimitSecondstomax.waitforresponses
//测试所进行的最大秒数。其内部隐含值是-n50000。它可以使对服务器的测试限制在一个固定的总时间以内。默认时,没有时间限制。
-ppostfileFilecontainingdatatoPOST
//包含了需要POST的数据的文件,文件格式如“p1=1&p2=2”.使用方法是-p111.txt。(配合-T)
-Tcontent-typeContent-typeheaderforPOSTing
//POST数据所使用的Content-type头信息,如-T“application/x-www-form-urlencoded”。(配合-p)
-vverbosityHowmuchtroubleshootinginfotoprint
//设置显示信息的详细程度–4或更大值会显示头信息,3或更大值可以显示响应代码(404,200等),2或更大值可以显示警告和其他信息。-V显示版本号并退出。
-wPrintoutresultsinHTMLtables
//以HTML表的格式输出结果。默认时,它是白色背景的两列宽度的一张表。
-iUseHEADinsteadofGET
//执行HEAD请求,而不是GET。
-xattributesStringtoinsertastableattributes
-yattributesStringtoinsertastrattributes
-zattributesStringtoinsertastdorthattributes
-CattributeAddcookie,eg.-C“c1=1234,c2=2,c3=3″(repeatable)
//-Ccookie-name=value对请求附加一个Cookie:行。其典型形式是name=value的一个参数对。此参数可以重复,用逗号分割。
提示:可以借助session实现原理传递JSESSIONID参数,实现保持会话的功能,如
-C”c1=1234,c2=2,c3=3,JSESSIONID=FF056CD16DA9D71CB131C1D56F0319F8″。
-HattributeAddArbitraryheaderline,eg.‘Accept-Encoding:gzip'Insertedafterallnormalheaderlines.(repeatable)
-AattributeAddBasicWWWAuthentication,theattributes
areacolonseparatedusernameandpassword.
-PattributeAddBasicProxyAuthentication,theattributes
areacolonseparatedusernameandpassword.
//-Pproxy-auth-username:password对一个中转代理提供BASIC认证信任。用户名和密码由一个:隔开,并以base64编码形式发送。无论服务器是否需要(即,是否发送了401认证需求代码),此字符串都会被发送。
-Xproxy:portProxyserverandportnumbertouse
-VPrintversionnumberandexit
-kUseHTTPKeepAlivefeature
-dDonotshowpercentilesservedtable.
-SDonotshowconfidenceestimatorsandwarnings.
-gfilenameOutputcollecteddatatognuplotformatfile.
-efilenameOutputCSVfilewithpercentagesserved
-hDisplayusageinformation(thismessage)
//-attributes设置属性的字符串.缺陷程序中有各种静态声明的固定长度的缓冲区。另外,对命令行参数、服务器的响应头和其他外部输入的解析也很简单,这可能会有不良后果。它没有完整地实现HTTP/1.x;仅接受某些'预想'的响应格式。strstr(3)的频繁使用可能会带来性能问题,即你可能是在测试ab而不是服务器的性能。
3.运行
ab-n100-c10https://www.nhooo.com/
对https://www.nhooo.com/进行100次请求,10个并发请求压力测试结果。
ServerSoftware:lighttpd/1.4.20 ServerHostname:www.nhooo.com ServerPort:80 DocumentPath:/ DocumentLength:2095bytes ConcurrencyLevel:10 //整个测试持续的时间 Timetakenfortests:3.303seconds //完成的请求数量 Completerequests:100 Failedrequests:0 Writeerrors:0 Totaltransferred:235200bytes HTMLtransferred:209500bytes //平均每秒处理30个请求 Requestspersecond:30.27[#/sec](mean) //平均每个请求处理时间为330毫秒注:这里将一次10个并发请求看成一个整体 Timeperrequest:330.335[ms](mean) //平均每个并发请求处理时间为33毫秒 Timeperrequest:33.034[ms](mean,acrossallconcurrentrequests) Transferrate:69.53[Kbytes/sec]received ConnectionTimes(ms) minmean[+/-sd]medianmax Connect:5117035.9178230 Processing:6015364.5121263 Waiting:5514864.4115258 Total:23532259.9299437 Percentageoftherequestsservedwithinacertaintime(ms) //在这100个请求中有50%在299毫秒内完成 50%299 //在这100个请求中有66%在312毫秒内完成 66%312 75%383 80%412 90%431 95%432 98%436 99%437 100%437(longestrequest)
PS:如何查看当前Apache的连接数
查看了连接数和当前的连接数
netstat-ant|grep$ip:80|wc-l netstat-ant|grep$ip:80|grepEST|wc-l
查看IP访问次数
netstat-nat|grep":80"|awk'{print$5}'|awk-F:'{print$1}'|sort|uniq-c|sort-n
Linux命令:
netstat-n|awk'/^tcp/{++S[$NF]}END{for(ainS)printa,S[a]}' watch"netstat-n|awk'/^tcp/{++S[\$NF]}END{for(ainS)printa,S[a]}'"
返回结果示例:
LAST_ACK5 SYN_RECV30 ESTABLISHED1597 FIN_WAIT151 FIN_WAIT2504 TIME_WAIT1057
说明:
SYN_RECV表示正在等待处理的请求数;
ESTABLISHED表示正常数据传输状态;
TIME_WAIT表示处理完毕,等待超时结束的请求数;
FIN_WAIT1表示server端主动要求关闭tcp连接;
FIN_WAIT2表示客户端中断连接;
LAST_ACK关闭一个TCP连接需要从两个方向上分别进行关闭,双方都是通过发送FIN来表示单方向数据的关闭,当通信双方发送了最后一个FIN的时候,发送方此时处于LAST_ACK状态,当发送方收到对方的确认(Fin的Ack确认)后才真正关闭整个TCP连接;