2007年12月2日 星期日

APACHE專用的壓力測試工具

在阿帕契服務器的套件中,有一個叫做 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)

假設我們要對 echo.fcg 做測試,仿真 1000 次的聯機請求,而且同一時間有 20 個並行的 (concurrent) 聯機請求的情況,只要在命令列模式下執行

$ ab -n 1000 -c 20 http://localhost/fcgi-bin/
稍等一會,ApacheBench 會把結果秀出來,

This is ApacheBench, Version 1.3
Copyright © 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Copyright © 1998-1999 The Apache Group,http://www.apache.org/
Benchmarking localhost (be patient)... Server Software: Apache/1.3.6
Server Hostname: localhost
Server Port: 80
Document Path: /fcgi-bin/echo.fcg
Document Length: 995 bytes
Concurrency Level: 20
Time taken for tests: 6.859 seconds
Complete requests: 1000
Failed requests: 0
Total transferred: 1142000 bytes
HTML transferred: 995000 bytes
Requests per second: 145.79
Transfer rate: 166.50 kb/s received

Connnection Times (ms) min avg max
Connect: 0 4 61
Processing: 62 128 771
Total: 62 132 832

以上結果指出,在同時間 20 個聯機請求 (Concurrency Level) 的情況下,完成 1000 次的連線請求,共花了 6.859 秒 (Time taken for tests),因此這個程序每秒平均可以處理 (Requests per second) 145.79 個聯機請求。
在接下來的評比測試中,我們就以每秒可以處理的聯機請求數目來做為效能評比的依據。

出處:http://bbs.ecstart.com/viewthread.php?tid=8158&extra=page%3D1

參考
http://kiwi.csie.chu.edu.tw/blog/archives/138
AB(Apache Benchmark)數據解讀
ab指令的語法是 ab -c {同時進行的request數量} -t {時間} {url} 或是 ab -c {同時進行的request數量} -n {次數} {url}
ab的測試方式有兩種:
1. -t {秒數}
2. -n {request次數}
兩種方式都可以取得可以觀察的數據,不過如果-n太少的話,就沒有意義。我通常都是使用-t 30或是-t 60。而這樣的測試有另一個好處是,在測試的其中,可以找真的人在一定時間內去實際點點看你的程式,如果時間都過去了(先別跟他講已經跑完了),他還是覺 得速度沒有差,那表示效能有到使用者能夠接受的感受。而需要效能數據,其實也是為了使用經驗法則推算出應用程式最多可以容納幾個使用者註冊。

以下舉個一個例子來解讀:

[root@dsa1 ~]# ab -c 20 -t 30 http://some.machine.com/test/
#這裡是版權宣告
This is ApacheBench, Version 2.0.40-dev <$Revision: 1.146 $> apache-2.0
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Copyright 2006 The Apache Software Foundation, http://www.apache.org/

Benchmarking xxx (be patient)
#這裡會將完成的req次數顯示出來,如果每超過5000會再次顯示
Finished 1028 requests

#主機資訊
Server Software: Apache/2.2.3
Server Hostname: xxx
Server Port: 80

Document Path: /test/
#要注意,如果傳輸的資料大小超過1MB,表示使用ADSL的人多少會因為資料量感受到緩慢
#,就可能不會是準確的測試結果
Document Length: 8943 bytes

#這裡表示你下了 -c 20
Concurrency Level: 20
#總測試時間,應該不會跟-t的時間差太遠
Time taken for tests: 30.27095 seconds
Complete requests: 1028
#這裡的Fail表示在TCP階段就連線失敗,如果fail太多次,出來的數據絕對不正確
Failed requests: 0
Write errors: 0
Total transferred: 9478392 bytes
HTML transferred: 9197475 bytes
#每秒鐘的Request次數,可以視為效能的指標。因為這次測試我們使用了-c 20
#表示在20個人同時連線的情況下,還可以保持每秒34個request。
Requests per second: 34.24 [#/sec] (mean)

#表示這20個人裡「平均」每個人感受到的回應時間(不包括瀏覽器顯示出來的時間)
#約是584ms,也就是0.58秒。
Time per request: 584.185 [ms] (mean)
Time per request: 29.209 [ms] (mean, across all concurrent requests)
Transfer rate: 308.25 [Kbytes/sec] received

Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 49 382.7 0 3000
Processing: 91 519 1287.7 262 20913
Waiting: 90 518 1287.7 260 20912
Total: 91 569 1542.9 262 21543

#這個曲線圖比較重要,算是ab的數據價值所在。這裡表示了這20個人所感受到的
#回應速度曲線,可以從0.2秒到21秒不等。也就是說,在這裡約有20*90%=18人,
#他們感受到的速度會低於1秒,而其他人會高於1秒。這個比平均數值還要更能表達
#使用者大多都是感受到什麼速度,因為在伺服器很忙碌的情況下,會有像21秒這種
#數值,這是會大大地拖累平均速度及每秒request數。
Percentage of the requests served within a certain time (ms)
50% 262
66% 327
75% 397
80% 449
90% 730
95% 1338
98% 5224
99% 8504
100% 21543 (longest request)

【下列文章您可能也有興趣】

沒有留言: