服務器壓力測試工具

目錄

  1. ab
  2. http_load
  3. webbench
  4. Siege

ab

安裝web

abapache 自帶的一款功能強大的測試工具,安裝了 apache 通常就自帶了apache

$ sudo apt-get install apache2-utils

測試windows

$ ab -c 1000 -n 10000 http://localhost:8080/     # 這個表示同時處理1000個請求並運行10000次

缺陷服務器

程序中有各類靜態聲明的固定長度的緩衝區。 另外,對命令行參數、服務器的響應頭和其餘外部輸入的解析也很簡單,這可能會有不良後果。cookie

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

HELPapp

具體結果請自行測試,詳細參數請參見 ab,部分解釋以下:socket

Options are:
    -n requests     Number of requests to perform
                    在測試會話中所執行的請求個數。 默認時,僅執行一個請求,但一般其結果不具備表明意義
    -c concurrency  Number of multiple requests to make at a time
                    一次產生的請求個數。默認是一次一個
    -t timelimit    Seconds to max. to spend on benchmarking
                    This implies -n 50000
                    測試所進行的最大秒數。其內部隱含值是-n 50000。 它可使對服務器的測試限制在一個固定的總時間之內。默認時,沒有時間限制
    -s timeout      Seconds to max. wait for each response
                    Default is 30 seconds
                    單個請求最大延遲,默認爲30s
    -b windowsize   Size of TCP send/receive buffer, in bytes
                    
    -B address      Address to bind to when making outgoing connections
    -p postfile     File containing data to POST. Remember also to set -T
                    包含了須要POST的數據的文件
    -u putfile      File containing data to PUT. Remember also to set -T
    -T content-type Content-type header to use for POST/PUT data, eg.
                    'application/x-www-form-urlencoded'
                    Default is 'text/plain'
                    POST數據所使用的Content-type頭信息
    -v verbosity    How much troubleshooting info to print
                    設置顯示信息的詳細程度 - 4或更大值會顯示頭信息, 3或更大值能夠顯示響應代碼(404, 200等), 2或更大值能夠顯示警告和其餘信息
    -w              Print out results in HTML tables
                    以HTML表的格式輸出結果。默認時,它是白色背景的兩列寬度的一張表
    -i              Use HEAD instead of GET
                    執行HEAD請求,而不是GET
    -x attributes   String to insert as table attributes
                    設置<table>屬性的字符串。 此屬性被填入<table 這裏 >
    -y attributes   String to insert as tr attributes
                    設置<tr>屬性的字符串
    -z attributes   String to insert as td or th attributes
                    設置<td>屬性的字符串
    -C attribute    Add cookie, eg. 'Apache=1234'. (repeatable)
                    對請求附加一個Cookie:行。 其典型形式是name=value的一個參數對。 此參數能夠重複
    -H attribute    Add Arbitrary header line, eg. 'Accept-Encoding: gzip'
                    Inserted after all normal header lines. (repeatable)
                    對請求附加額外的頭信息。 此參數的典型形式是一個有效的頭信息行,其中包含了以冒號分隔的字段和值的對 (如, "Accept-Encoding: zip/zop;8bit")
    -A attribute    Add Basic WWW Authentication, the attributes
                    are a colon separated username and password.
                    對服務器提供BASIC認證信任。 用戶名和密碼由一個:隔開,並以base64編碼形式發送。 不管服務器是否須要(即, 是否發送了401認證需求代碼),此字符串都會被髮送
    -P attribute    Add Basic Proxy Authentication, the attributes
                    are a colon separated username and password.
                    對一箇中轉代理提供BASIC認證信任。 用戶名和密碼由一個:隔開,並以base64編碼形式發送。 不管服務器是否須要(即, 是否發送了401認證需求代碼),此字符串都會被髮送
    -X proxy:port   Proxyserver and port number to use
                    對請求使用代理服務器
    -V              Print version number and exit
                    顯示版本號並退出
    -k              Use HTTP KeepAlive feature
                    啓用HTTP KeepAlive功能,即, 在一個HTTP會話中執行多個請求。 默認時,不啓用KeepAlive功能
    -d              Do not show percentiles served table.
                    不顯示"percentage served within XX [ms] table"的消息(爲之前的版本提供支持)
    -S              Do not show confidence estimators and warnings.
                    不顯示中值和標準背離值, 並且在均值和中值爲標準背離值的1到2倍時,也不顯示警告或出錯信息。 默認時,會顯示 最小值/均值/最大值等數值。(爲之前的版本提供支持)
    -q              Do not show progress when doing more than 150 requests
                    若是處理的請求數大於150, ab每處理大約10%或者100個請求時,會在stderr輸出一個進度計數。 此-q標記能夠抑制這些信息
    -l              Accept variable document length (use this for dynamic pages)
    -g filename     Output collected data to gnuplot format file.
                    把全部測試結果寫入一個'gnuplot'或者TSV (以Tab分隔的)文件。 此文件能夠方便地導入到Gnuplot, IDL, Mathematica, Igor甚至Excel中。 其中的第一行爲標題
    -e filename     Output CSV file with percentages served
                    產生一個以逗號分隔的(CSV)文件, 其中包含了處理每一個相應百分比的請求所須要(從1%到100%)的相應百分比的(以微妙爲單位)時間。 因爲這種格式已經「二進制化」,因此比'gnuplot'格式更有用
    -r              Don't exit on socket receive errors.
    -h              Display usage information (this message)
                    顯示使用方法
    -Z ciphersuite  Specify SSL/TLS cipher suite (See openssl ciphers)
    -f protocol     Specify SSL/TLS protocol
                    (SSL3, TLS1, TLS1.1, TLS1.2 or ALL)

http_load

http_load 以並行複用的方式運行,用以測試 web 服務器的吞吐量與負載。可是它不一樣於大多數壓力測試工具,它能夠以一個單一的進程運行,通常不會把客戶機搞死。還能夠測試 HTTPS 類的網站請求ide

安裝工具

$ wget http://soft.vpser.net/test/http_load/http_load-12mar2006.tar.gz
$ tar zxvf http_load-12mar2006.tar.gz
$ cd http_load-12mar2006
$ make && make install

測試

須要將測試的連接寫入到一個文件:

$ cat urls.txt
http://localhost:8080

測試命令:

$ http_load -p 1000 -s 10 urls.txt          # -p 併發訪問進程數  -s 訪問時間  須要訪問的URL文件
73980 fetches, 160 max parallel, 1.4796e+06 bytes, in 10.0013 seconds
20 mean bytes/connection
7397.02 fetches/sec, 147940 bytes/sec
msecs/connect: 0.955713 mean, 1002.4 max, 0.038 min
msecs/first-response: 4.52099 mean, 206.347 max, 0.533 min
HTTP response codes:
  code 200 -- 73980

對比

測試結果中主要的指標是 fetches/sec、msecs/connect 這個選項,即服務器每秒可以響應的查詢次數,用這個指標來衡量性能。彷佛比 apache的ab準確率要高一些,也更有說服力一些。

Qpt-每秒響應用戶數和response time,每鏈接響應用戶時間。

測試的結果主要也是看這兩個值。固然僅有這兩個指標並不能完成對性能的分析,咱們還須要對服務器的cpu、men進行分析,才能得出結論

HELP

參數其實能夠自由組合,參數之間的選擇並無什麼限制。好比你寫成 http_load -parallel 5 -seconds 300 urls.txt 也是能夠的。

具體命令能夠參見 http_load -h,部分解釋以下:

-parallel   簡寫-p :含義是併發的用戶進程數。
-fetches    簡寫-f :含義是總計的訪問次數
-rate       簡寫-p :含義是每秒的訪問頻率
-seconds    簡寫-s :含義是總計的訪問時間
準備URL文件:urllist.txt,文件格式是每行一個URL,URL最好超過50-100個測試效果比較好,每行一個url

webbench

webbench是Linux下的一個網站壓力測試工具,最多能夠模擬3萬個併發鏈接去測試網站的負載能力

安裝

$ wget http://soft.vpser.net/test/webbench/webbench-1.5.tar.gz
$ tar zxvf webbench-1.5.tar.gz
$ cd webbench-1.5/
$ make && make install

測試

$ webbench -c 1000 -t 10 http://localhost:8080      # -c 併發數 -t 運行測試時間 URL

總結

這個給出的結果內容比較少,不如上面幾個好用,不過這個程序卻是很小

HELP

更多的用法能夠參考 webbench -h

Siege

一款開源的壓力測試工具,能夠根據配置對一個WEB站點進行多用戶的併發訪問,記錄每一個用戶全部請求過程的相應時間,並在必定數量的併發訪問下重複進行

安裝

$ wget http://soft.vpser.net/test/siege/siege-2.67.tar.gz
$ tar -zxf siege-2.67.tar.gz
$ cd siege-2.67/
$ ./configure && make && make install

測試

$ siege -c 200 -r 10 http://localhost:8080

我寫了個 -r 10000,看着他還在跑。。。。。。

HELP

具體的用法能夠參考 siege -h

相關文章
相關標籤/搜索