官網幫助文檔:http://httpd.apache.org/docs/2.4/programs/ab.html;html
VSC++版本)
ab簡介nginx
Apache自動的ab工具(Windows應用路徑:\Apache24\bin),在本地環境本地命令行發起測試請求來驗證服務器的處理性能,並不參雜網絡傳輸時間的影響。
ab進行的測試的本質是基於HTTP協議,能夠理解爲對web服務器軟件的黑盒性能測試,得到的一切數據和計算結果,都是能夠經過HTTP來解釋的。
ab語法
ab [ -Aauth-username:password ] [ -bwindowsize ] [ -Blocal-address ] [ -cconcurrency ] [ -Ccookie-name=value ] [ -d ] [ -ecsv-file ] [ -fprotocol ] [ -ggnuplot-file ] [ -h ] [ -Hcustom-header ] [ -i ] [ -k ] [ -l ] [ -mHTTP-method ] [ -nrequests ] [ -pPOST-file ] [ -Pproxy-auth-username:password ] [ -q ] [ -r ] [ -stimeout ] [ -S ] [ -ttimelimit ] [ -Tcontent-type ] [ -uPUT-file ] [ -vverbosity] [ -V ] [ -w ] [ -x<table>-attributes ] [ -Xproxy[:port] ] [ -y<tr>-attributes ] [ -z<td>-attributes ] [ -Zciphersuite ] [http[s]://]hostname[:port]/path
web
命令註解:
-c concurrency 請求併發數,默認爲1;
-n requests 請求總數;
-A auth-username:password 向服務器提供基本認證信息。用戶名和密碼之間有一個「:」隔開,並將以base64編碼形式發送,不管服務器是否須要(便是否發送了401認證需求代碼),此字符串都會被髮送。
-b windowsize Size of TCP send/receive buffer, in bytes.
-B local-address Address to bind to when making outgoing connections
-C cookie-name=value 對請求附加一個「Cookie:」頭行。其典型形式是:name=value的一個參數對。此參數能夠重複。
-d 不顯示「percentage served within XX[ms] table」消息(爲之前版本提供支持)
-e csv-file 產生一個逗號分隔(CSV)文件,其中包含了處理每一個相應百分比請求(從1%到100%)所須要的相應百分比時間(以微妙爲單位)。因爲這種格式已經「二進制化」。因此比「gnuplot」格式更有用。
-f protocol 指定SSL/TLS procotol()
-g gnuplot-file 把全部測試結果寫入一個「gnuplot」或者TSV(以TAB分隔)文件。此文件能夠方便地導入Gnuplot,IDL,Mathematica,Excel中。其中的第一行爲標題。
-h 顯示使用方法的幫助信息
-H custom-header 對請求附加額外的頭信息,此參數的典型形式是一個有效的頭信息行,其中包含了以冒號分隔的字段和值(如:」Accept-Encoding:zip/zop;8bit「).
-i 執行HEAD請求,而不是GET請求
-k 啓用Keepalive功能,即在一個HTTP會話中執行多個請求。默認不啓用此功能
-p POST-file 包含了POST數據的文件
-P proxy-auth-username:password 對一箇中轉代理提供基本認證信息。用戶名和密碼用」:「隔開,並將以base64編碼形式發送。不管服務器是否須要(便是否發送了407代理認證需求代碼)此字符串都會被髮送。
-q 若是代理的請求數大於150,ab每處理大約10%或者100個請求時,會在stderr輸出一個進度計數、此-q標記能夠屏蔽這些信息。
-r 在socket接收錯誤時不退出
-s 用於編譯中使用了SSL的受保護的https,而不是http協議的時候。此功能是實驗性的,最好不要用。
-S 不顯示中值和標準誤差值,並且在均值和中值爲標準誤差值得1-2倍時,也不顯示警告和出錯信息。默認時,會顯示最小值/均值/最大值等數值
-t timelimit 測試所進行的最大秒數。內部隱含值是」-n 50000「。它能夠時對服務器的測試限制在一個固定的總時間之內。默認時:沒有時間限制。
-T content-type POST數據時所使用的」Content-type「頭信息
-u PUT-file File containing data to PUT. Remember to also set -T
-v verbosity 設置顯示信息的詳細程度,4或更大值會顯示頭信息,3或更大值能夠顯示響應代碼(404,200等),2或更大值能夠顯示警告和其餘信息。
-V 顯示版本號並退出
-w 以HTML表格信息輸出結果,默認時,它是白色背景的兩列寬度的一張表
-x <table>-attributes 設置<table>屬性的字符串。此屬性被填入<table 這裏>
-X proxy[:port] 對請求使用代理服務器
-y <tr>-attributes 設置<tr>屬性的字符串
-z <td>-attributes 設置<td>屬性的字符串
-Z ciphersuite 指定SSL/TLS密碼套件(見openssl密碼)
Output註釋:
Server Software 表示被測試的Web服務器軟件名稱
Server Hostname 表示請求的URL主機名
Server Port 表示被測試的Web服務器軟件的監聽端口
Document Path 表示請求的URL中的根絕對路徑,經過該文件的後綴名,咱們通常能夠了解該請求的類型
Document Length 表示HTTP響應數據的正文長度
Concurrency Level 表示併發用戶數,這是咱們設置的參數之一
Time taken for tests 表示全部這些請求被處理完成所花費的總時間
Complete requests 表示總請求數量,這是咱們設置的參數之一
Failed requests 表示失敗的請求數量,這裏的失敗是指請求在鏈接服務器、發送數據等環節發生異常,以及無響應後超時的狀況。若是接收到的HTTP響應數據的頭信息中含有2XX之外的狀態碼,則會在測試結果中顯示另外一個名爲「Non-2xx responses」的統計項,用於統計這部分請求數,這些請求並不算在失敗的請求中。
Total transferred 表示全部請求的響應數據長度總和,包括每一個HTTP響應數據的頭信息和正文數據的長度。注意這裏不包括HTTP請求數據的長度,僅僅爲web服務器流向用戶PC的應用層數據總長度。
HTML transferred 表示全部請求的響應數據中正文數據的總和,也就是減去了Total transferred中HTTP響應數據中的頭信息的長度。
Requests per second 吞吐率,計算公式:Complete requests / Time taken for tests
Time per request 用戶平均請求等待時間,計算公式:Time token for tests/(Complete requests/Concurrency Level)
Time per requet(across all concurrent request) 服務器平均請求等待時間,計算公式:Time taken for tests/Complete requests,正好是吞吐率的倒數。也能夠這麼統計:Time per request/Concurrency Level
Transfer rate 表示這些請求在單位時間內從服務器獲取的數據長度,計算公式:Total trnasferred/ Time taken for tests,這個統計很好的說明服務器的處理能力達到極限時,其出口寬帶的需求量。
Percentage of requests served within a certain time(ms) 這部分數據用於描述每一個請求處理時間的分佈狀況,好比以上測試,80%的請求處理時間都不超過6ms,這個處理時間是指前面的Time per request,即對於單個用戶而言,平均每一個請求的處理時間。
ab實例分解apache
C:\httpd-2.4.16-x64-vc11\Apache24\bin>ab -n 20000 -c 20000 http://10.34.52.174/mnTUiajef%28beWYdkY%28r2q%29YT%25i0qyjUijqqs74
//ab發送url請求,總請求數20000,併發請求數20000
This is ApacheBench, Version 2.3 <$Revision: 1663405 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking 10.34.52.174 (be patient)
Completed 2000 requests
Completed 4000 requests
Completed 6000 requests
Completed 8000 requests
Completed 10000 requests
Completed 12000 requests
Completed 14000 requests
Completed 16000 requests
Completed 18000 requests
Completed 20000 requests
Finished 20000 requests
Server Software: nginx/1.5.8
//apache版本爲1.5.8windows
Server Hostname: 10.34.52.174
//服務器主機名:10.34.52.174服務器
//服務器端口:80cookie
Document Path: /mnTUiajef%28beWYdkY%28r2q%29YT%25i0qyjUijqqs74
//測試的頁面地址(該地址通過加密設置)網絡
Document Length: 186 bytes
//文本大小:186bytes多線程
//請求併發數:2w併發
Time taken for tests: 38.002 seconds
//整個測試持續時間
//完成的請求數量:2w
//失敗的請求數量:0
Total transferred: 6660000 bytes
//整個場景中的網絡傳輸量:6660000bytes
HTML transferred: 3720000 bytes
//全部請求的響應數據中正文數據的總和:3720000bytes
Requests per second: 526.29 [#/sec] (mean)
//每秒請求數(至關於LR中的每秒事務數TPS),mean表示爲平均值:526.29/sec。計算公式:Complete requests / Time taken for tests
Time per request: 38002.000 [ms] (mean)
//請求所消耗的總時間,計算公式:Time token for tests/(Complete requests/Concurrency Level)
Time per request: 1.900 [ms] (mean, across all concurrent requests)
//平均每一個請求的消耗時間(每一個請求實際運行時間的平均值),計算公式:Time per request/Concurrency Level
Transfer rate: 171.15 [Kbytes/sec] received
//平均每秒網絡上的流量,能夠幫助排除是否存在網絡流量過大致使響應時間延長的問題
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 2 0.7 2 14 //創建鏈接消耗的時間
Processing: 4110 20746 9139.9 20758 35321 //處理請求消耗的時間
Waiting: 786 18605 10011.3 18911 34562 //等待服務器處理消耗的時間
Total: 4112 20748 9139.8 20759 35326 //整個過程消耗的時間
//網絡上消耗的時間的分解
Percentage of the requests served within a certain time (ms)
50% 20759
66% 25908
75% 28767
80% 30371
90% 33468
95% 34428
98% 34988
99% 35158
100% 35326 (longest request)
//整個場景全部請求的響應狀況。在場景中每一個請求都有一個響應時間。其中50%的請求響應時間小於20759毫秒。
//若是這個數據很平均,說明服務器在併發狀況下對於各個請求所提供的能力是均衡的,面對這種壓力的併發狀況下,對資源沒有明顯的使用短缺;
ab使用環境說明
ab在使用過程當中,受客戶機、網絡、等環境影響較爲嚴重。
ab是客戶端模擬多線程來經過socket對服務器發起tcp請求,並等待服務器處理執行頁面輸出頁面結果並返回到客戶端以此來計算頁面的執行時間等相關數據。那個客戶機CPU處理多線程的能力,測試時客戶機的CPU狀態,內存狀態都會對測試結果形成影響。若是客戶機同時處理這麼多請求的能力很弱,那麼須要很長時間才能將請求發送到服務器,服務器處理完後也須要很長時間對返回數據作處理,這樣就達不到測試服務器性能的要求了。