apache-ab 壓力測試詳解

Double-Jin發表於2019-05-08

新專案快上線了,在上線前要對生產環境做一下壓力測試,看下該硬體的效能滿不滿足專案前期。市面上能做壓縮測試的軟體很多,隨便查一下都能找到數十種,在這裡給大家介紹一個很常見而且也是我常用的測壓工具,那就是apache自帶的apache-ab壓力測試模組。

在Windows系統下,開啟cmd命令列視窗,定位到apache安裝目錄的bin目錄下 \
cd C:\XXX\Apache\bin

鍵入命令: 
ab -n 800 -c 800  http://www.baidu.com

c 800  即:每次併發800  個

n 800 即: 共傳送800 個請求

ab -t 60 -c 100 http://www.baidu.com

在60秒內發請求,一次100個請求。 

引數的的請求

ab -t 60 -c 100 -T "application/x-www-form-urlencoded" p p.txt “http://www.baidu.com"

p.txt 是和ab.exe在一個目錄 p.txt 中可以寫引數,如 p=wdp&fq=78,要注意編碼問題

引數中的三種形式

application/x-www-form-urlencoded (預設值)

就是設定表單傳輸的編碼,典型的post請求

multipart/form-data.

用來指定傳輸資料的特殊型別的,主要就是我們上傳的非文字的內容,比如圖片,mp3,檔案等等

text/plain . 是純文字傳輸的意思

 ab -n 100 -c 100 -p p.txt -T application/x-www-form-urlencoded "http://www.baidu.com"
This is ApacheBench, Version 2.3 <$Revision: 1748469 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking apiv2.aligogo.in (be patient).....done

Server Software:        nginx/1.16.0
Server Hostname:        apiv2.aligogo.in
Server Port:            80

Document Path:          /Api/getOptimal   //測試的地址
Document Length:        51 bytes     //返回大小

Concurrency Level:      100       //測試的併發數
Time taken for tests:   4.076 seconds  //總耗時
Complete requests:      100      //完成的請求數量
Failed requests:        0    //失敗的請求數量
Total transferred:      21400 bytes    //整個過程中的網路傳輸量
Total body sent:        92400   //不清楚,沒找到相關說明
HTML transferred:       5100 bytes  //測試過程中產生的HTML傳輸量
Requests per second:    24.53 [#/sec] (mean)  //表示伺服器吞吐量,每秒事務數,括號中的 mean 表示這是一個平均值
Time per request:       4076.348 [ms] (mean)  //表示使用者請求的平均響應時間,後面括號中的mean表示這是一個平均值
Time per request:       40.763 [ms] (mean, across all concurrent requests)  //表示伺服器請求平均處理時間,即實際執行時間的平均值
Transfer rate:          5.13 [Kbytes/sec] received
                        22.14 kb/s sent
                        27.26 kb/s total

                        //表示這些請求在單位時間內從伺服器獲取的資料長度,可以幫助排除是否存在網路流量過大導致響應時間延長的問題

Connection Times (ms)
              min  mean[+/-sd] median   max    //min最小值、mean平均值、[+/-sd]方差、median中位數、maxz最大值
Connect:        0   31 300.0      1    3000    //socket鏈路建立消耗,代表網路狀況好
Processing:   427 1908 1191.8   3043    3086   //寫入緩衝區消耗+鏈路消耗+伺服器消耗
Waiting:      427 1908 1191.8   3042    3086   //寫入緩衝區消耗+鏈路消耗+伺服器消耗+讀取資料消耗
Total:        428 1939 1192.6   3045    3454   //單個事務總時間

Percentage of the requests served within a certain time (ms)
  50%   3045
  66%   3059
  75%   3067
  80%   3071
  90%   3081
  95%   3084
  98%   3087
  99%   3454
 100%   3454 (longest request)
 //整個場景中所有請求的響應情況。在場景中每個請求都有一個響應時間,其中50%的使用者響應時間小於3045毫秒,66%的使用者響應時間小於3059毫秒,最大的響應時間小於 3454 毫秒
  • ab 判斷成功與否知識判斷2xx 響應碼,不接收伺服器的返回值
  • ab命令在一般系統上面做測試時候,一般併發不能超過1024個,其實是因為因為系統限制每個程式開啟的最大檔案數為1024,可以用ulimit -a來檢視
  • n 可以指定最大請求數,但是不能超過50000個
  • Time per request是關注點
Usage: ab [options] [http[s]://]hostname[:port]/path
用法:ab [選項] 地址

選項:
Options are:
    -n requests    #執行的請求數,即一共發起多少請求。
    -c concurrency    #請求併發數。
    -t timelimit    #測試所進行的最大秒數。其內部隱含值是-n 50000,它可以使對伺服器的測試限制在一個固定的總時間以內。預設時,沒有時間限制。
    -s timeout    #指定每個請求的超時時間,預設是30秒。
    -b windowsize    #指定tcp視窗的大小,單位是位元組。
    -B address    #指定在發起連線時繫結的ip地址是什麼。
    -p postfile    #指定要POST的檔案,同時要設定-T引數。
    -u putfile    #指定要PUT的檔案,同時要設定-T引數。
    -T content-type    #指定使用POST或PUT上傳文字時的文字型別,預設是'text/plain'。
    -v verbosity    #設定詳細模式等級。
    -w    #將結果輸出到html的表中。
    -i    #使用HEAD方式代替GET發起請求。
    -y attributes    #以表格方式輸出時,設定html表格tr屬性。 
    -z attributes    #以表格方式輸出時,設定html表格th或td屬性。
    -C attribute    #新增cookie,比如'Apache=1234'。(可重複)
    -H attribute    #為請求追加一個額外的頭部,比如'Accept-Encoding: gzip'。(可重複)
    -A attribute    #對伺服器提供BASIC認證信任。使用者名稱和密碼由一個:隔開,並以base64編碼形式傳送。無論伺服器是否需要(即,是否傳送了401認證需求程式碼),此字串都會被髮送。
    -P attribute    #對一箇中轉代理提供BASIC認證信任。使用者名稱和密碼由一個:隔開,並以base64編碼形式傳送。無論伺服器是否需要(即, 是否傳送了401認證需求程式碼),此字串都會被髮送。
    -X proxy:port   #指定代理伺服器的IP和埠。
    -V              #列印版本資訊。
    -k              #啟用HTTP KeepAlive功能,即在一個HTTP會話中執行多個請求。預設時,不啟用KeepAlive功能。
    -d              #不顯示"percentage served within XX [ms] table"的訊息(為以前的版本提供支援)。
    -q              #如果處理的請求數大於150,ab每處理大約10%或者100個請求時,會在stderr輸出一個進度計數。此-q標記可以抑制這些資訊。
    -g filename     #把所有測試結果寫入一個'gnuplot'或者TSV(以Tab分隔的)檔案。此檔案可以方便地匯入到Gnuplot,IDL,Mathematica,Igor甚至Excel中。其中的第一行為標題。
    -e filename     #產生一個以逗號分隔的(CSV)檔案,其中包含了處理每個相應百分比的請求所需要(從1%到100%)的相應百分比的(以微妙為單位)時間。由於這種格式已經“二進位制化”,所以比'gnuplot'格式更有用。
    -r              #當收到錯誤時不要退出。
    -h              #輸出幫助資訊

未經允許禁止轉載 -- 苦力小林,

相關文章