Apache BenchMark壓力測試


官網幫助文檔:http://httpd.apache.org/docs/2.4/programs/ab.html

官網下載地址: http://httpd.apache.org/download.cgi(下載注意版本對應系統,Windows系統要求對應
VSC++版本)
 

ab簡介

    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

 
命令注解
-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實例分解

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.8

Server Hostname:        10.34.52.174

//服務器主機名:10.34.52.174

Server Port:            80

//服務器端口:80

Document Path:          /mnTUiajef%28beWYdkY%28r2q%29YT%25i0qyjUijqqs74

//測試的頁面地址(該地址經過加密設置)

Document Length:        186 bytes

//文本大小:186bytes


Concurrency Level:      20000

//請求並發數:2w

Time taken for tests:   38.002 seconds

//整個測試持續時間

Complete requests:      20000

//完成的請求數量:2w

Failed requests:        0

//失敗的請求數量: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狀態,內存狀態都會對測試結果造成影響。如果客戶機同時處理這么多請求的能力很弱,那么需要很長時間才能將請求發送到服務器,服務器處理完后也需要很長時間對返回數據做處理,這樣就達不到測試服務器性能的要求了。
    附帶一篇ab並發的文章,僅作參考。【apache並發測試工具ab為什么測不准: http://my.oschina.net/gorillaz/blog/115658


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM