1. 程式人生 > >使用wrk進行性能測試

使用wrk進行性能測試

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進行性能測試