[轉(zhuǎn)]ab參數(shù)詳解 – 壓力測(cè)試
原文:http://blog.linuxeye.com/124.html
Apache附帶的ab,它非常容易使用,ab可以直接在Web服務(wù)器本地發(fā)起測(cè)試請(qǐng)求。這至關(guān)重要,因?yàn)槲覀兿M麥y(cè)試的服務(wù)器的處理時(shí)間,而不包含數(shù)據(jù)的網(wǎng)絡(luò)傳輸時(shí)間以及用戶PC本地的計(jì)算時(shí)間。
需要清楚的是,ab進(jìn)行一切測(cè)試的本質(zhì)都是基于HTTP,所以可以說(shuō)它是對(duì)于Web服務(wù)器軟件的黑盒性能測(cè)試,它獲得的一切數(shù)據(jù)和計(jì)算結(jié)果,都可以通過(guò)HTTP來(lái)解釋。
另有一些壓力測(cè)試軟件,包括LoadRnner、Jmeter等,則是不同程度上包含了服務(wù)器處理之外的時(shí)間,比如LoadRunner運(yùn)行在用戶PC上,可以錄制瀏覽器行為,這種測(cè)試的結(jié)果玩玩?zhèn)戎赜谡军c(diǎn)用戶的角度,有另外一些層面的參考意義。
接下來(lái),將使用ab來(lái)進(jìn)行一次壓力測(cè)試,在本書(shū)中我們使用Apache 2.3中附帶的ab,其版本信息如下所示:
[root@localhost ~]#/usr/local/apache/bin/ab -VThis is ApacheBench,Version2.3<$Revision:655654 $>Copyright1996AdamTwiss,ZeusTechnologyLtd, http://www.zeustech.net/Licensed to TheApacheSoftwareFoundation, http://www.apache.org/
請(qǐng)看下面的命令行信息:
[root@localhost ~]# /usr/local/apache/bin/ab -n1000 -c10 http://localhost/index.htmlThis is ApacheBench,Version2.3<$Revision:655654 $>Copyright1996AdamTwiss,ZeusTechnologyLtd, http://www.zeustech.net/Licensed to TheApacheSoftwareFoundation, http://www.apache.org/Benchmarking localhost (be patient)Completed100 requests Completed200 requests Completed300 requests Completed400 requests Completed500 requests Completed600 requests Completed700 requests Completed800 requests Completed900 requests Completed1000 requests Finished1000 requests ServerSoftware:Apache/2.2.19ServerHostname: localhost ServerPort:80DocumentPath:/index.html DocumentLength:45 bytes ConcurrencyLevel:10Time taken for tests:0.454 seconds Complete requests:1000Failed requests:0Write errors:0Total transferred:322644 bytes HTML transferred:45090 bytes Requests per second:2204.64[#/sec] (mean)Time per request:4.536[ms](mean)Time per request:0.454[ms](mean, across all concurrent requests)Transfer rate:694.64[Kbytes/sec] received ConnectionTimes(ms) min mean[+/-sd] median max Connect:010.515Processing:135.6262Waiting:035.6262Total:145.6363Percentage of the requests served within a certain time (ms)50%366%475%480%490%695%1298%2699%33100%63(longest request)
請(qǐng)注意我們?cè)趩?dòng)ab時(shí),傳入3個(gè)命令行參數(shù),它們正是代表了前面提到的前提條件:
-n1000 表示總請(qǐng)求數(shù)位1000
-c 表示并發(fā)用戶數(shù)為10
http://localhost/index.html 表示這些請(qǐng)求的目標(biāo)URL。
測(cè)試結(jié)果一目了然,我們看到吞吐率顯示為2204.64reqs/s。同時(shí),在測(cè)試結(jié)果中還有一些其他內(nèi)容也值得我們關(guān)注,主要包括:
Server Software
表示被測(cè)試的Web服務(wù)器軟件名稱,這里是Apache/2.2.19,它來(lái)自于http響應(yīng)數(shù)據(jù)的頭信息,所以如果是我們自己編寫(xiě)的Web服務(wù)器軟或者修改開(kāi)源Web服務(wù)器軟件的源代碼,便可以隨意改寫(xiě)這里的名稱。
vi /usr/local/apache/conf/httpd.conf #隱藏具體版本信息
ServerSignature Off
ServerTokens Prod
Server Hostname
表示請(qǐng)求的URL中的主機(jī)部分名稱,它來(lái)自于http請(qǐng)求數(shù)據(jù)的頭信息,這里我們請(qǐng)求的URL是http://localhost/index.html,所以主機(jī)名為localhost,說(shuō)明我們的請(qǐng)求是從Web服務(wù)器端發(fā)起的。
Server Port
表示被測(cè)試的Web服務(wù)器軟件的監(jiān)聽(tīng)端口,為了方便測(cè)試,我們后面會(huì)對(duì)多個(gè)不同的Web服務(wù)器軟件使用不同的監(jiān)聽(tīng)端口。
Document Path
表示請(qǐng)求的URL中根絕對(duì)路徑,它同樣來(lái)自于http請(qǐng)求數(shù)據(jù)的頭信息,通過(guò)它的后綴名,我們一般可以理解該請(qǐng)求的類型。
Document Length
表示http響應(yīng)數(shù)據(jù)的正文長(zhǎng)度。
Concurrency Level
表示并發(fā)用戶數(shù),這是我們?cè)O(shè)置的參數(shù)。
Time taken for tests
表示所有這些請(qǐng)求被處理完成花費(fèi)的總時(shí)間。順便提一下,某些Apache版本如2.2.4附帶的ab,對(duì)于這一統(tǒng)計(jì)項(xiàng)存在一些計(jì)算上的bug,當(dāng)總請(qǐng)求數(shù)較少時(shí),其統(tǒng)計(jì)的總時(shí)間會(huì)無(wú)法小于0.1s。
Complete requests
表示總請(qǐng)求數(shù),這是我們?cè)O(shè)置的相應(yīng)參數(shù)。
Failed requests
表示失敗的請(qǐng)求數(shù),這里的失敗是指請(qǐng)求的連接服務(wù)器、發(fā)送數(shù)據(jù)、接收數(shù)據(jù)等環(huán)節(jié)發(fā)生異常,以及無(wú)響應(yīng)后超時(shí)的情況。對(duì)于超時(shí)時(shí)間的設(shè)置可以用ab的-t參數(shù)。
而如果接受到的http響應(yīng)數(shù)據(jù)的頭信息中含有2xx以外的狀態(tài)碼,則會(huì)在測(cè)試結(jié)果顯示另一個(gè)名為“Non-2xx responses”的統(tǒng)計(jì)項(xiàng),用于統(tǒng)計(jì)這部分請(qǐng)求數(shù),這些請(qǐng)求并不算是失敗的請(qǐng)求。
Total transferred
表示所有請(qǐng)求的響應(yīng)數(shù)據(jù)長(zhǎng)度總和,包括每個(gè)http響應(yīng)數(shù)據(jù)的頭信息和正文數(shù)據(jù)的長(zhǎng)度。注意這里不包括http請(qǐng)求數(shù)據(jù)的長(zhǎng)度,所以Total
transferred代表了從Web服務(wù)器流向用戶PC的應(yīng)用層數(shù)據(jù)總長(zhǎng)度。通過(guò)使用ab的-v參數(shù)即可查看詳細(xì)的http頭信息。
HTML transferred
表示所有請(qǐng)求的響應(yīng)數(shù)據(jù)中正文數(shù)據(jù)的總和,也就是減去了Total transferred中http響應(yīng)數(shù)據(jù)中頭信息的長(zhǎng)度。
Requests per second
這便是我們重點(diǎn)關(guān)注的吞吐率,它等于:
Complete requests / Time taken for tests
Time per request
這便是前面提到的用戶平均請(qǐng)求等待時(shí)間,它等于:
Time taken for tests / (Complete requests /Concurrency Level)
Time per request?(across all concurrent requests)
這便是前面提到的服務(wù)器平均請(qǐng)求處理時(shí)間,它等于:
Time taken for tests / Complete requests
這正是吞吐率的倒數(shù)。同時(shí),它也等于:
Time per request / Concurrency Level
Transfer rate
表示這些請(qǐng)求在單位時(shí)間內(nèi)從服務(wù)器獲取的數(shù)據(jù)長(zhǎng)度,它等于:
Total transferred / Time taken for tests
這個(gè)統(tǒng)計(jì)項(xiàng)可以很好的說(shuō)明服務(wù)器在處理能力達(dá)到限制時(shí),其出口帶寬的需求量。
利用前面介紹的有關(guān)帶寬的知識(shí),不難計(jì)算出結(jié)果。
Percentage of the requests served within a certain time(ms)
這部分?jǐn)?shù)據(jù)用于描述每個(gè)請(qǐng)求處理時(shí)間的分布情況,比如在以上測(cè)試結(jié)果中,80%請(qǐng)求的處理時(shí)間都不超過(guò)1ms,而99%的請(qǐng)求都不超過(guò)2ms。注意這里的處理時(shí)間,是指前面的Time per request,即對(duì)于單個(gè)用戶而言,平均每個(gè)請(qǐng)求處理的時(shí)間。
繼續(xù)壓力測(cè)試
下面,我們?cè)賮?lái)進(jìn)行一次壓力測(cè)試,此時(shí)并發(fā)用戶數(shù)為100,其他條件不變,測(cè)試結(jié)果如下所示:
[root@localhost ~]# /usr/local/apache/bin/ab -n1000 -c100 http://localhost/index.htmlThis is ApacheBench,Version2.3<$Revision:655654 $>Copyright1996AdamTwiss,ZeusTechnologyLtd, http://www.zeustech.net/Licensed to TheApacheSoftwareFoundation, http://www.apache.org/Benchmarking localhost (be patient)Completed100 requests Completed200 requests Completed300 requests Completed400 requests Completed500 requests Completed600 requests Completed700 requests Completed800 requests Completed900 requests Completed1000 requests Finished1000 requests ServerSoftware:Apache/2.2.19ServerHostname: localhost ServerPort:80DocumentPath:/index.html DocumentLength:45 bytes ConcurrencyLevel:100Time taken for tests:0.369 seconds Complete requests:1000Failed requests:0Write errors:0Total transferred:283648 bytes HTML transferred:46080 bytes Requests per second:2711.45[#/sec] (mean)Time per request:36.881[ms](mean)Time per request:0.369[ms](mean, across all concurrent requests)Transfer rate:751.07[Kbytes/sec] received ConnectionTimes(ms) min mean[+/-sd] median max Connect:0123.41219Processing:112318.917122Waiting:61918.313114Total:203517.130128Percentage of the requests served within a certain time (ms)50%3066%3275%3480%3590%5395%7598%9999%114100%128(longest request)
和前一次的測(cè)試結(jié)果相比,可以看出,當(dāng)并發(fā)用戶數(shù)據(jù)從原來(lái)的10變?yōu)?00后,吞吐率從原來(lái)的2204.64增長(zhǎng)到了2711.45,服務(wù)器平均請(qǐng)求處理
時(shí)間從原來(lái)的0.454ms降到了0.369ms,而用戶評(píng)價(jià)請(qǐng)求等待時(shí)間從原來(lái)的4.536ms增加到了36.881ms.
可見(jiàn),隨著并發(fā)用戶數(shù)的變化,吞吐率、用戶平均請(qǐng)求等待時(shí)間、服務(wù)器配件請(qǐng)求處理時(shí)間都發(fā)生了相應(yīng)的變化。

浙公網(wǎng)安備 33010602011771號(hào)