1. 程式人生 > >linux下使用ab工具對伺服器進行壓力測試

linux下使用ab工具對伺服器進行壓力測試

ab

安裝

yum -y install httpd-tools (centos) 安裝完成後使用ab -v 檢視ab版本確認是否安裝成功

選項

選項 含義
-A auth-username:password 對伺服器提供BASIC認證信任。 使用者名稱和密碼由一個:隔開,並以base64編碼形式傳送。 無論伺服器是否需要(即, 是否傳送了401認證需求程式碼),此字串都會被髮送。
-c concurrency 一次產生的請求個數。預設是一次一個。
-C cookie-name=value 對請求附加一個Cookie:行。 其典型形式是name=value的一個引數對。 此引數可以重複。
-d 不顯示"percentage served within XX [ms] table"的訊息(為以前的版本提供支援)。
-e csv-file 產生一個以逗號分隔的(CSV)檔案, 其中包含了處理每個相應百分比的請求所需要(從1%到100%)的相應百分比的(以微妙為單位)時間。 由於這種格式已經“二進位制化”,所以比’gnuplot’格式更有用。
-g gnuplot-file 把所有測試結果寫入一個’gnuplot’或者TSV (以Tab分隔的)檔案。 此檔案可以方便地匯入到Gnuplot, IDL, Mathematica, Igor甚至Excel中。 其中的第一行為標題。
-h 顯示使用方法。
-H custom-header 對請求附加額外的頭資訊。 此引數的典型形式是一個有效的頭資訊行,其中包含了以冒號分隔的欄位和值的對 (如, “Accept-Encoding: zip/zop;8bit”).
-i 執行HEAD請求,而不是GET。
-k 啟用HTTP KeepAlive功能,即, 在一個HTTP會話中執行多個請求。 預設時,不啟用KeepAlive功能.
-n requests 在測試會話中所執行的請求個數。 預設時,僅執行一個請求,但通常其結果不具有代表意義。
-p POST-file 包含了需要POST的資料的檔案.
-P proxy-auth-username:password 對一箇中轉代理提供BASIC認證信任。 使用者名稱和密碼由一個:隔開,並以base64編碼形式傳送。 無論伺服器是否需要(即, 是否傳送了401認證需求程式碼),此字串都會被髮送。
-q 如果處理的請求數大於150, ab每處理大約10%或者100個請求時,會在stderr輸出一個進度計數。 此-q標記可以抑制這些資訊。
-s 用於編譯中(ab -h會顯示相關資訊)使用了SSL的受保護的https, 而不是http協議的時候。此功能是實驗性的,也是很簡陋的。最好不要用。
-S 不顯示中值和標準背離值, 而且在均值和中值為標準背離值的1到2倍時,也不顯示警告或出錯資訊。 預設時,會顯示 最小值/均值/最大值等數值。(為以前的版本提供支援).
-t timelimit 測試所進行的最大秒數。其內部隱含值是-n 50000。 它可以使對伺服器的測試限制在一個固定的總時間以內。預設時,沒有時間限制。
-T content-type POST資料所使用的Content-type頭資訊。
-v verbosity 設定顯示資訊的詳細程度 - 4或更大值會顯示頭資訊, 3或更大值可以顯示響應程式碼(404, 200等), 2或更大值可以顯示警告和其他資訊。
-V 顯示版本號並退出。
-w 以HTML表的格式輸出結果。預設時,它是白色背景的兩列寬度的一張表。
-x -attributes 設定屬性的字串。 此屬性被填入<table 這裡 >.
-X proxy[:port] 對請求使用代理伺服器。

缺陷

程式中有各種靜態宣告的固定長度的緩衝區。 另外,對命令列引數、伺服器的響應頭和其他外部輸入的解析也很簡單,這可能會有不良後果。

它沒有完整地實現HTTP/1.x; 僅接受某些’預想’的響應格式。 strstr(3)的頻繁使用可能會帶來效能問題,即, 你可能是在測試ab而不是伺服器的效能。

使用

引數很多,一般我們用 -c 和 -n 引數就可以了. 例如:

這個表示同時處理1000個請求並執行1000次index.php檔案.

#/usr/local/xiaobai/apache2054/bin/ab -c 1000 -n 1000 http://127.0.0.1/index.html.zh-cn.gb2312

This is ApacheBench, Version 2.0.41-dev <$Revision: 1.121.2.12 $> apache-2.0
Copyright (c) 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Copyright (c) 1998-2002 The Apache Software Foundation, http://www.apache.org/

Benchmarking 127.0.0.1 (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Completed 600 requests
Completed 700 requests
Completed 800 requests
Completed 900 requests
Finished 1000 requests

響應

Server Software:        Apache          #伺服器軟體
Server Hostname:        www.91cnm.com   #域名
Server Port:            80              #請求埠號

Document Path:          /               #檔案路徑
Document Length:        40888 bytes     #頁面位元組數

Concurrency Level:      10              #請求的併發數
Time taken for tests:   27.300 seconds  #總訪問時間
Complete requests:      1000            #請求成功數量
Failed requests:        0               #請求失敗數量
Write errors:           0
Total transferred:      41054242 bytes  #請求總資料大小(包括header頭資訊)
HTML transferred:       40888000 bytes  #html頁面實際總位元組數
Requests per second:    36.63 [#/sec] (mean)  #每秒多少請求,這個是非常重要的引數數值,伺服器的吞吐量
Time per request:       272.998 [ms] (mean)     #使用者平均請求等待時間 
Time per request:       27.300 [ms] (mean, across all concurrent requests)
                                                # 伺服器平均處理時間,也就是伺服器吞吐量的倒數 
Transfer rate:          1468.58 [Kbytes/sec] received  #每秒獲取的資料長度

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:       43   47   2.4     47      53
Processing:   189  224  40.7    215     895
Waiting:      102  128  38.6    118     794
Total:        233  270  41.3    263     945

Percentage of the requests served within a certain time (ms)
  50%    263    #50%使用者請求在263ms內返回
  66%    271    #66%使用者請求在271ms內返回
  75%    279    #75%使用者請求在279ms內返回
  80%    285    #80%使用者請求在285ms內返回
  90%    303    #90%使用者請求在303ms內返回
  95%    320    #95%使用者請求在320ms內返回
  98%    341    #98%使用者請求在341ms內返回
  99%    373    #99%使用者請求在373ms內返回
 100%    945    #(longest request)

由於對於併發請求,cpu實際上並不是同時處理的,而是按照每個請求獲得的時間片逐個輪轉處理的,所以基本上第一個Time per request時間約等於第二個Time per request時間乘以併發請求數