字體:  

Apache 專用的壓力測試工具 -- ab

adj 發表於: 2007-11-29 21:56 來源: ADJ網路控股集團


在阿帕契服務器的套件中,有一個叫做 ab (ApacheBench) 的工具。ApacheBench 主要是用來測試阿帕契服務器執行效率用的,我們就以 ApacheBench 做為 CGI vs. FastCGI 的評比工具。

ApacheBench 可以針對某個特定的 URL 仿真出連續的聯機請求,同時還可以仿真出同時間點數個相同的聯機請求,因此利用 ApacheBench 可幫助我們在網站開發期間仿真實際上線可能的情況,利用仿真出來的數據做為調整服務器設定或程序的依據。 ApacheBench 的用法如下:

Usage: /usr/local/apache/bin/ab [options] [http://]hostname[:port]/path
Options are:
-n requests Number of requests to perform
-c concurrency Number of multiple requests to make
-t timelimit Seconds to max. wait for responses
-p postfile File containg data to POST
-T content-type Content-type header for POSTing
-v verbosity How much troubleshooting info to print
-w Print out results in HTML tables
-x attributes String to insert as table attributes
-y attributes String to insert as tr attributes
-z attributes String to insert as td or th attributes
-V Print version number and exit
-k Use HTTP KeepAlive feature
-h Display usage information (this message)

而我經常使用的參數摘要如下:


1. 同時 20 個連線,連續點擊 1000 次 ( 每個 Request 執行完畢後都會自動斷線,然後再重新連線 )

QUOTE:

ab -n 1000 -c 20 http://www.example.com/index.php


2. 同時 20 個連線,連續點擊 1000 次,並且使用 Keep-Alive 方式連線

(當 Web Server 有支援 Keep-Alive 功能時 ApacheBench 會在同一個連線下連續點擊該網頁)

QUOTE:


ab -n 1000 -c 20 -k http://www.example.com/index.php


3. 將測試的效能原始資料匯出成 CSV 檔

QUOTE:


ab -e output.csv -n 1000 -c 20 http://www.example.com/index.php



如何有效的檢視結果

壓力測試的核心在於如何分析結果,底下我用一個測試的結果說明每個欄位所代表的意義。如果你只要看重點的話,可以看 Failed requests、Requests per second、與 Time per request 這三個參數也就差不多夠了。
其中的 Failed requests 的數量太高的話,很有可能代表你的 Web Application 的穩定度不夠,而導致使用大量要求時無法回應需求 。
而 Request per second 代表你每表可送出的回應數有多少,代表你 Web Application 的承載量有多少(在不考慮頻寬限制的情況下)。

QUOTE:


Server Software:        Apache/2.2.25
Server Hostname:        www.adj.idv.tw
Server Port:            80

Document Path:          /
Document Length:        0 bytes

Concurrency Level:      20
Time taken for tests:   6.585 seconds
Complete requests:      1000
Failed requests:        0
Write errors:           0
Non-2xx responses:      1000
Total transferred:      277000 bytes
HTML transferred:       0 bytes
Requests per second:    151.86 [#/sec] (mean)
Time per request:       131.702 [ms] (mean)
Time per request:       6.585 [ms] (mean, across all concurrent requests)
Transfer rate:          41.08 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:       59   60   0.5     60      66
Processing:    67   70  13.6     69     445
Waiting:       67   70  13.6     69     445
Total:        126  131  13.7    129     504

Percentage of the requests served within a certain time (ms)
  50%    129
  66%    130
  75%    130
  80%    131
  90%    132
  95%    133
  98%    140
  99%    151
 100%    504 (longest request)


如上表顯示的結果來說明,我一個欄位一個欄位的講解如下:

    Server Software:    Web主機的作業系統與版本(若Web主機設定關閉此資訊則無)
    Server Hostname:  Web主機的IP位址(Hostname)
    Server Port:           Web主機的連接埠(Port)
    Document Path:     測試網址的路徑部分
    Document Length: 測試網頁回應的網頁大小
    Concurrency Level: 同時進行壓力測試的人數
    Time taken for tests: 本次壓力測試所花費的總秒數
    Complete requests: 完成的要求數(Requests)
    Failed requests:      失敗的要求數(Requests)
    Write errors:           寫入失敗的數量
    Total transferred:   本次壓力測試的總數據傳輸量(包括 HTTP Header 的資料也計算在內)
    HTML transferred:  本次壓力測試的總數據傳輸量(僅計算回傳的 HTML 的資料)
    Requests per second: 平均每秒可回應多少要求
    Time per request:  平均每個要求所花費的時間(單位: 豪秒)
    Time per request:  平均每個要求所花費的時間,跨所有同時連線數的平均值(單位: 豪秒)
    Transfer rate:         從 ab 到 Web Server 之間的網路傳輸速度

參考文章:
http://blog.miniasp.com/post/2008/06/Using-ApacheBench-ab-to-to-Web-stress-test.aspx