wrk 壓力測試 http benchmark POST 接口

簡單的 http 性能測試工具

wrk.git

一個簡單的 http benchmark 工具, 能做很多基本的 http 性能測試.
wrk 的一個很好的特性就是能用很少的線程壓出很大的併發量.
原因是它使用了一些操作系統特定的高性能 io 機制, 比如 select, epoll, kqueue 等.

其實它是複用了 redis 的 ae 異步事件驅動框架. 確切的說 ae 事件驅動框架並不是 redis 發明的, 它來至於 Tcl 的解釋器 jim, 這個小巧高效的框架, 因爲被 redis 採用而更多的被大家所熟知。

要用 wrk, 首先要編譯 wrk

你的機器上需要已經安裝了 git 和基本的 c 編譯環境。wrk 本身是用 c 寫的並且沒有使用很多第三方庫. 所以編譯基本不會遇到什麼問題(運行不會存在太大難度)。

安裝

Mac 安裝

brew install wrk

注意: mac 本身連接數有限制,不要做太大的測試

Linux 安裝

git clone https://github.com/wg/wrk.git
cd wrk
make

成功以後在目錄下有一個 wrk 文件,將這個文件複製到你的軟件目錄,配置好環境變量即可,這裏就不細說了

編譯錯誤

fatalerror: openssl/ssl.h: Nosuchfileor directory

是因爲系統中沒有安裝 openssl 的庫

sudo apt-get install libssl-dev
# or run
sudo yum install openssl-devel

使用

簡單的性能測試

wrk -t12 -c100 -d30s http://192.168.31.107

# 輸出爲
12 threadsand 100 connections
ThreadStats Avg Stdev Max +/- Stde
Latency 538.64ms 368.66ms 1.99s 77.33
Req/Sec 15.62 10.28 80.00 75.35
5073 requestsin 30.09s, 75.28MB rea
Socketerrors: connect 0, read 5, write 0, timeout 6
Requests/sec: 168.5
Transfer/sec: 2.50M

一般線程數不宜過多. 核數的 2 到 4 倍足夠,wrk 不是使用每個連接一個線程的模型, 而是通過異步網絡 io 提升併發量. 所以網絡通信不會阻塞線程執行

結果統計分析

線程統計分析

Gr7FYL

Latency: 可以理解爲響應時間
Req/Sec: 每個線程每秒鐘的完成的請求數

一般我們來說我們主要關注平均值和最大值.
標準差如果太大說明樣本本身離散程度比較高. 有可能系統性能波動很大

讀寫分析

5073 requestsin 30.09s, 75.28MB rea
Socketerrors: connect 0, read 5, write 0, timeout 6
Requests/sec: 168.5
Transfer/sec: 2.50M

wrk Post 接口測試

首先需要準備一個 lua 文件

wrk.method = "POST"
wrk.headers["Content-Type"] = "application/x-www-form-urlencoded"
wrk.body = "youbody&youset"

這個文件內容建議自己填寫,保存爲 post.lua 文件

當然這個腳本內容可以再次定義,具體查看 wrk 的 git 文檔

執行腳本

wrk -t4 -c2000 -d60s -T5s --script=post.lua --latency http://192.168.31.107/user/login

這樣就是模擬 4 個線程,2000 個連接,在 60s 內,間隔 5s 執行 post.lua 的請求

如測試post json:

post.lua 文件

-- example HTTP POST script which demonstrates setting the
-- HTTP method, body, and adding a header
wrk.method = "POST"
wrk.body   = "{\"q\":1}"
wrk.headers["Content-Type"] = "application/json"
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://www.cnblogs.com/williamjie/p/9845476.html