一、什么是ab
ab,即Apache Benchmark,是一種用于測試Apache超文本傳輸協(xié)議(HTTP)服務(wù)器的工具。

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),就可以看到如下的用法介紹界面。

復(fù)制代碼
 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)
復(fù)制代碼

安裝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)的首頁