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

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

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

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

F:\Apache24\bin>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 #被測試服務器軟件名稱
Server Hostname: study.163.com #服務器主機名
Server Port: 80 #服務器端口
Document Path: / #請求的URL中的根絕對路徑
Document Length: 314180 bytes #頁面的大小
Concurrency Level: 10 #並發數
Time taken for tests: 5.020 seconds #整個測試耗時
Complete requests: 100 #總共完成的請求數量
Failed requests: 99 #失敗數99(可能除了第一次剩下的99次全部錯誤。網易雲課堂應該是對同一ip大量多次快速的訪問做了限制)
(Connect: 0, Receive: 0, Length: 99, Exceptions: 0)
Total transferred: 31473840 bytes #測試過程中產生的網絡傳輸總量
HTML transferred: 31411340 bytes #測試過程中產生的HTML傳輸量
Requests per second: 19.92 [#/sec] (mean) #表示服務器吞吐量,每秒事務數,括號中的 mean 表示這是一個平均值
Time per request: 502.031 [ms] (mean) #表示用戶請求的平均響應時間,后面括號中的mean表示這是一個平均值
Time per request: 50.203 [ms] (mean, across all concurrent requests) #表示服務器請求平均處理時間,即實際運行時間的平均值
Transfer rate: 6122.37 [Kbytes/sec] received #表示這些請求在單位時間內從服務器獲取的數據長度,可以幫助排除是否存在網絡流量過大導致響應時間延長的問題
Connection Times (ms) #min最小值、mean平均值、[+/-sd]方差、median中位數、maxz最大值
min mean[+/-sd] median max
Connect: 20 24 2.6 25 32 #socket鏈路建立消耗,代表網絡狀況好
Processing: 260 436 80.5 430 614 #寫入緩沖區消耗+鏈路消耗+服務器消耗
Waiting: 55 81 24.1 75 200 #寫入緩沖區消耗+鏈路消耗+服務器消耗+讀取數據消耗
Total: 288 461 80.0 455 636 #單個事務總時間
#網絡上消耗的時間的分解,表示這些請求在單位時間內從服務器獲取的數據長度
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)
#整個場景中所有請求的響應情況。在場景中每個請求都有一個響應時間,其中50%的用戶響應時間小於455毫秒,60%的用戶響應時間小於500毫秒,最大的響應時間小於636 毫秒
總結
1.ab 判斷成功與否知識判斷2xx 響應碼,不接收服務器的返回值,所以同樣的響應ab測試支持的並發數大於LR和Jemter,TPS的 響應值也會比較大
2.ab運行的測試並發數與ab所運行的機器的cpu的顆粒度有很大的關系,cpu顆粒度越大,測試結果支持的並發數越大
3.ab適合測試HTTP協議的URL的連接並發,特別是Web系統的首頁
