壓測工具 wrk

13sai發表於2019-12-30

最近有需要做一些壓力測試,之前一直用ab,用起來不是很舒服,最近有使用wrk,輕量好用。

安裝

git clone https://github.com/wg/wrk.git wrk
cd wrk
make
# move the executable to somewhere in your PATH
sudo cp wrk /somewhere/in/your/PATH

預設情況下wrk會使用自帶的LuaJIT和OpenSSL,如果你想使用系統已安裝的版本,可以使用WITH_LUAJIT和WITH_OPENSSL這兩個選項來指定它們的路徑。比如:

make WITH_LUAJIT=/usr WITH_OPENSSL=/usr

使用說明

wrk <選項> <被測HTTP服務的URL>                            
  Options:                                            
    -c, --connections <N>  跟伺服器建立並保持的TCP連線數量  
    -d, --duration    <T>  壓測時間           
    -t, --threads     <N>  使用多少個執行緒進行壓測   

    -s, --script      <S>  指定Lua指令碼路徑       
    -H, --header      <H>  為每一個HTTP請求新增HTTP頭      
        --latency          在壓測結束後,列印延遲統計資訊   
        --timeout     <T>  超時時間     
    -v, --version          列印正在使用的wrk的詳細版本資訊

  <N>代表數字引數,支援國際單位 (1k, 1M, 1G)
  <T>代表時間引數,支援時間單位 (2s, 2m, 2h)

測試

wrk -t8 -c200 -d30s --latency  "http://www.bing.com"

輸出:
Running 30s test @ http://www.bing.com
  8 threads and 200 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency    46.67ms  215.38ms   1.67s    95.59%
    Req/Sec     7.91k     1.15k   10.26k    70.77%
  Latency Distribution
     50%    2.93ms
     75%    3.78ms
     90%    4.73ms
     99%    1.35s 
  1790465 requests in 30.01s, 684.08MB read
Requests/sec:  59658.29

Running 30s test @ http://www.bing.com (壓測時間30s)
  8 threads and 200 connections (共8個測試執行緒,200個連線)
  Thread Stats   Avg      Stdev     Max   +/- Stdev
              (平均值) (標準差)(最大值)(正負一個標準差所佔比例)
    Latency    46.67ms  215.38ms   1.67s    95.59%
    (延遲)
    Req/Sec     7.91k     1.15k   10.26k    70.77%
    (處理中的請求數)
  Latency Distribution (延遲分佈)
     50%    2.93ms
     75%    3.78ms
     90%    4.73ms
     99%    1.35s (99分位的延遲)
  1790465 requests in 30.01s, 684.08MB read (30.01秒內共處理完成了1790465個請求,讀取了684.08MB資料)
Requests/sec:  59658.29 (平均每秒處理完成59658.29個請求)
Transfer/sec:     22.79MB (平均每秒讀取資料22.79MB)

lua指令碼使用

--data.lua
local data=  "{.count.:1}"
wrk.headers["Content-Type"] =  "application/jason"
wrk.method  =  "POST"
function  request()
    return wrk.format('POST', nil, nil, data)
end

測試:

wrk -t500 -c1000 -d1s  --script=data.lua --latency https://github.13sai.com/

個人用了幾次,感覺比ab好用,推薦一下。

參考:
Http壓測工具wrk使用指南
wrk

本作品系原創(除文中說明外), 採用《CC 協議》許可,轉載必須註明作者和本文連結

分享開發知識,歡迎交流。

相關文章