最近有需要做一些壓力測試,之前一直用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好用,推薦一下。
本作品系原創(除文中說明外), 採用《CC 協議》許可,轉載必須註明作者和本文連結