ab性能測試工具的使用
ab命令會創(chuàng)建很多的并發(fā)訪問線程,模擬多個訪問者同時對某一URL地址進行訪問。它的測試目標(biāo)是基于URL的,因此,既可以用來測試Apache的負(fù)載壓力,也可以測試nginx、lighthttp、tomcat、IIS等其它Web服務(wù)器的壓力。
ab命令對發(fā)出負(fù)載的計算機要求很低,既不會占用很高CPU,也不會占用很多內(nèi)存,但卻會給目標(biāo)服務(wù)器造成巨大的負(fù)載,其原理類似CC攻擊。自己測試使用也須注意,否則一次上太多的負(fù)載,可能造成目標(biāo)服務(wù)器因資源耗完,嚴(yán)重時甚至導(dǎo)致死機。
二、ab的安裝
只要安裝了Apache,就能夠在Apache的安裝目錄中找到它。它的居住地址是Apache安裝目錄/bin/ab.exe。
在使用之前我們先來學(xué)習(xí)一下ab的用法。首先,我們輸入cmd打開DOS窗口,然后將更改當(dāng)前工作目錄為:Apache安裝目錄/bin/。然后鍵入幫助命令ab -help(或者ab /?、ab -h),就可以看到如下的用法介紹界面。
1 Usage: ab [options] [http[s]://]hostname[:port]/path
2 用法:ab [選項] 地址
3
4 選項:
5 Options are:
6 -n requests #執(zhí)行的請求數(shù),即一共發(fā)起多少請求。
7 -c concurrency #請求并發(fā)數(shù)。
8 -t timelimit #測試所進行的最大秒數(shù)。其內(nèi)部隱含值是-n 50000,它可以使對服務(wù)器的測試限制在一個固定的總時間以內(nèi)。默認(rèn)時,沒有時間限制。
9 -s timeout #指定每個請求的超時時間,默認(rèn)是30秒。
10 -b windowsize #指定tcp窗口的大小,單位是字節(jié)。
11 -B address #指定在發(fā)起連接時綁定的ip地址是什么。
12 -p postfile #指定要POST的文件,同時要設(shè)置-T參數(shù)。
13 -u putfile #指定要PUT的文件,同時要設(shè)置-T參數(shù)。
14 -T content-type #指定使用POST或PUT上傳文本時的文本類型,默認(rèn)是'text/plain'。
15 -v verbosity #設(shè)置詳細(xì)模式等級。
16 -w #將結(jié)果輸出到html的表中。
17 -i #使用HEAD方式代替GET發(fā)起請求。
18 -y attributes #以表格方式輸出時,設(shè)置html表格tr屬性。
19 -z attributes #以表格方式輸出時,設(shè)置html表格th或td屬性。
20 -C attribute #添加cookie,比如'Apache=1234'。(可重復(fù))
21 -H attribute #為請求追加一個額外的頭部,比如'Accept-Encoding: gzip'。(可重復(fù))
22 -A attribute #對服務(wù)器提供BASIC認(rèn)證信任。用戶名和密碼由一個:隔開,并以base64編碼形式發(fā)送。無論服務(wù)器是否需要(即,是否發(fā)送了401認(rèn)證需求代碼),此字符串都會被發(fā)送。
23 -P attribute #對一個中轉(zhuǎn)代理提供BASIC認(rèn)證信任。用戶名和密碼由一個:隔開,并以base64編碼形式發(fā)送。無論服務(wù)器是否需要(即, 是否發(fā)送了401認(rèn)證需求代碼),此字符串都會被發(fā)送。
24 -X proxy:port #指定代理服務(wù)器的IP和端口。
25 -V #打印版本信息。
26 -k #啟用HTTP KeepAlive功能,即在一個HTTP會話中執(zhí)行多個請求。默認(rèn)時,不啟用KeepAlive功能。
27 -d #不顯示"percentage served within XX [ms] table"的消息(為以前的版本提供支持)。
28 -q #如果處理的請求數(shù)大于150,ab每處理大約10%或者100個請求時,會在stderr輸出一個進度計數(shù)。此-q標(biāo)記可以抑制這些信息。
29 -g filename #把所有測試結(jié)果寫入一個'gnuplot'或者TSV(以Tab分隔的)文件。此文件可以方便地導(dǎo)入到Gnuplot,IDL,Mathematica,Igor甚至Excel中。其中的第一行為標(biāo)題。
30 -e filename #產(chǎn)生一個以逗號分隔的(CSV)文件,其中包含了處理每個相應(yīng)百分比的請求所需要(從1%到100%)的相應(yīng)百分比的(以微妙為單位)時間。由于這種格式已經(jīng)“二進制化”,所以比'gnuplot'格式更有用。
31 -r #當(dāng)收到錯誤時不要退出。
32 -h #輸出幫助信息
33 -Z ciphersuite 指定SSL/TLS密碼套件
34 -f protocol 指定SSL/TLS協(xié)議(SSL3, TLS1, TLS1.1, TLS1.2 or ALL)
安裝ab的windows版

----------------------------------------

--------------------------------------

三、ab的使用
雖然ab可以配置的參數(shù)選項比較多,但是,一般情況下我們只需要使用形如ab -n 數(shù)字 -c 數(shù)字 url路徑的命令即可。比如,對網(wǎng)易云課堂 進行壓力測試。測試總次數(shù)為1000,并發(fā)數(shù)為10(相當(dāng)于10個用戶同時訪問,他們總共訪問1000次)。
ab -n1000 -c10 http://study.163.com/

F:Apache24in>ab -n100 -c10 http://study.163.com/
This is ApacheBench, Version 2.3 <$Revision: 1826891 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking study.163.com (be patient).....done
Server Software: nginx #被測試服務(wù)器軟件名稱
Server Hostname: study.163.com #服務(wù)器主機名
Server Port: 80 #服務(wù)器端口
Document Path: / #請求的URL中的根絕對路徑
Document Length: 314180 bytes #頁面的大小
Concurrency Level: 10 #并發(fā)數(shù)
Time taken for tests: 5.020 seconds #整個測試耗時
Complete requests: 100 #總共完成的請求數(shù)量
Failed requests: 99 #失敗數(shù)99(可能除了第一次剩下的99次全部錯誤。網(wǎng)易云課堂應(yīng)該是對同一ip大量多次快速的訪問做了限制)
(Connect: 0, Receive: 0, Length: 99, Exceptions: 0)
Total transferred: 31473840 bytes #測試過程中產(chǎn)生的網(wǎng)絡(luò)傳輸總量
HTML transferred: 31411340 bytes #測試過程中產(chǎn)生的HTML傳輸量
Requests per second: 19.92 [#/sec] (mean) #表示服務(wù)器吞吐量,每秒事務(wù)數(shù),括號中的 mean 表示這是一個平均值
Time per request: 502.031 [ms] (mean) #表示用戶請求的平均響應(yīng)時間,后面括號中的mean表示這是一個平均值
Time per request: 50.203 [ms] (mean, across all concurrent requests) #表示服務(wù)器請求平均處理時間,即實際運行時間的平均值
Transfer rate: 6122.37 [Kbytes/sec] received #表示這些請求在單位時間內(nèi)從服務(wù)器獲取的數(shù)據(jù)長度,可以幫助排除是否存在網(wǎng)絡(luò)流量過大導(dǎo)致響應(yīng)時間延長的問題
Connection Times (ms) #min最小值、mean平均值、[+/-sd]方差、median中位數(shù)、maxz最大值
min mean[+/-sd] median max
Connect: 20 24 2.6 25 32 #socket鏈路建立消耗,代表網(wǎng)絡(luò)狀況好
Processing: 260 436 80.5 430 614 #寫入緩沖區(qū)消耗+鏈路消耗+服務(wù)器消耗
Waiting: 55 81 24.1 75 200 #寫入緩沖區(qū)消耗+鏈路消耗+服務(wù)器消耗+讀取數(shù)據(jù)消耗
Total: 288 461 80.0 455 636 #單個事務(wù)總時間
#網(wǎng)絡(luò)上消耗的時間的分解,表示這些請求在單位時間內(nèi)從服務(wù)器獲取的數(shù)據(jù)長度
Percentage of the requests served within a certain time (ms)
50% 455
66% 500
75% 534
80% 548
90% 565
95% 581
98% 609
99% 636
100% 636 (longest request)
#整個場景中所有請求的響應(yīng)情況。在場景中每個請求都有一個響應(yīng)時間,其中50%的用戶響應(yīng)時間小于455毫秒,60%的用戶響應(yīng)時間小于500毫秒,最大的響應(yīng)時間小于636 毫秒
!!!! 總結(jié)
1.ab 判斷成功與否知識判斷2xx 響應(yīng)碼,不接收服務(wù)器的返回值,所以同樣的響應(yīng)ab測試支持的并發(fā)數(shù)大于LR和Jemter,TPS的 響應(yīng)值也會比較大
2.ab運行的測試并發(fā)數(shù)與ab所運行的機器的cpu的顆粒度有很大的關(guān)系,cpu顆粒度越大,測試結(jié)果支持的并發(fā)數(shù)越大
3.ab適合測試HTTP協(xié)議的URL的連接并發(fā),特別是Web系統(tǒng)的首頁

