使用wrk進行性能測試
阿新 • • 發佈:2018-01-28
mount ber 輸出結果 運行 mas running lin 有一個 tin
1 wrk介紹
wrk是一款現代化的HTTP性能測試工具,即使運行在單核CPU上也能產生顯著的壓力。它融合了一種多線程設計,並使用了一些可擴展事件通知機制,例如epoll and kqueue。
一個可選的LuaJIT腳本能產生HTTP請求,響應處理和自定義報告,更詳細的腳本內容可以參考scripts目錄下的一些例子。
2 wrk下載和安裝
git clone https://github.com/wg/wrk.git cd wrk make
編譯成功後,目錄下就會有一個wrk文件。如果編譯過程中報錯fatal error: openssl/ssl.h: No such file or directory,則需要安裝openssl的庫。
sudo apt-get install libssl-dev
或者
sudo yum install openssl-devel
3 一個簡單的例子
wrk -t12 -c400 -d30s http://127.0.0.1:8080/index.html
它將會產生如下測試,12個線程(threads),保持400個HTTP連接(connections)開啟,測試時間30秒(seconds)。
詳細的命令行參數如下:
-c, --connections(連接數): total number of HTTP connections to keep open with each thread handling N= connections/threads -d, --duration(測試持續時間): duration of the test, e.g. 2s, 2m, 2h -t, --threads(線程): total number of threads to use -s, --script(腳本): LuaJIT script, see SCRIPTING -H, --header(頭信息): HTTP header to add to request, e.g. "User-Agent: wrk" --latency(響應信息): print detailed latency statistics --timeout(超時時間): record a timeout if a response is not received within this amount of time.
下面是輸出結果:
Running 30s test @ http://127.0.0.1:8080/index.html 12 threads and 400 connections Thread Stats Avg Stdev Max +/- Stdev Latency 635.91us 0.89ms 12.92ms 93.69% Req/Sec 56.20k 8.07k 62.00k 86.54% 22464657 requests in 30.00s, 17.76GB read Requests/sec: 748868.53 Transfer/sec: 606.33MB
結果解讀如下:
Latency: 響應信息, 包括平均值, 標準偏差, 最大值, 正負一個標準差占比。
Req/Sec: 每個線程每秒鐘的完成的請求數,同樣有平均值,標準偏差,最大值,正負一個標準差占比。
30秒鐘總共完成請求數為22464657,讀取數據量為17.76GB。
線程總共平均每秒鐘處理748868.53個請求(QPS),每秒鐘讀取606.33MB數據量。
4 發送post請求例子
首先需要創建一個post.lua文件,內容如下:
wrk.method = "POST" wrk.headers["uid"] = "127.0.0.1" wrk.headers["Content-Type"] = "application/json" wrk.body =‘{"uid":"127.0.0.1","Version":"1.0","devicetype":"web","port":"8080"}‘
其中Content-Type還有一種類型是 application/x-www-form-urlencoded
測試執行命令如下:
./wrk --latency -t100 -c1500 -d120s --timeout=15s -s post.lua http://127.0.0.1:8080/index.html
這個腳本加入了--lantency:輸出結果裏可以看到響應時間分布情況,
Running 2m test @ http://127.0.0.1:8080/index.html 100 threads and 1500 connections Thread Stats Avg Stdev Max +/- Stdev Latency 127.26ms 157.88ms 2.44s 87.94% Req/Sec 177.91 45.09 1.10k 69.97% Latency Distribution 50% 66.05ms 75% 143.57ms 90% 325.41ms 99% 760.20ms 2138290 requests in 2.00m, 3.17GB read Requests/sec: 17804.57 Transfer/sec: 27.05MB
使用wrk進行性能測試