一、wrk介紹
今天給大家介紹一款開源的性能測試工具 wrk,簡單易用,沒有Load Runner那麼複雜,他和 apache benchmark(ab)同屬於性能測試工具,但是比 ab 功能更加強大,並且可以支持lua腳本來創建複雜的測試場景。
wrk 的一個很好的特性就是能用很少的線程壓出很大的併發量, 原因是它使用了一些操作系統特定的高性能 I/O 機制, 比如 select, epoll, kqueue 等。 其實它是複用了 redis 的 ae 異步事件驅動框架. 確切的說 ae 事件驅動框架並不是 redis 發明的, 它來至於 Tcl的解釋器 jim, 這個小巧高效的框架, 因爲被 redis 採用而更多的被大家所熟知.
wrk GitHub 源碼:https://github.com/wg/wrk
安裝:wrk只能運行於 Unix 類的系統上,也只能在這些系統上便宜,所以我們需要一個Linux或者macOs。
二、安裝wrk前環境準備
2.1 安裝 make 工具
sudo apt-get install make
2.2 安裝 gcc編譯環境
sudo apt-get install build-essential
三、安裝wrk
3.1 使用 git 下載 wrk 的源碼到本地:
git clone https://github.com/wg/wrk.git
3.2 切換到git的wrk目錄
cd wrk-master/
3.3 然後使用make命令編譯安裝
make
編譯完成之後,目錄下面會多一個 wrk 的文件。
三、wrk測試與使用
3.1 測試百度
./wrk -c 1 -t 1 -d 1 http://www.baidu.com
3.2 測試nginx
wrk --latency -H "Host: www.example.com" -c 2048 -d 30 -t 2 http://127.0.0.1:80
四、簡單說一下wrk裏面各個參數什麼意思
-t 需要模擬的線程數
-c 需要模擬的連接數
–timeout 超時的時間
-d 測試的持續時間
結果:
Latency:響應時間
Req/Sec:每個線程每秒鐘的完成的請求數
Avg:平均
Max:最大
Stdev:標準差
+/- Stdev: 正負一個標準差佔比 標準差如果太大說明樣本本身離散程度比較高. 有可能系統性能波動很大.
如果想看響應時間的分佈情況可以加上–latency參數
我們的模擬測試的時候需要注意,一般線程數不宜過多,核數的2到4倍足夠了。 多了反而因爲線程切換過多造成效率降低, 因爲 wrk 不是使用每個連接一個線程的模型, 而是通過異步網絡 I/O 提升併發量。 所以網絡通信不會阻塞線程執行,這也是 wrk 可以用很少的線程模擬大量網路連接的原因。
在 wrk 的測試結果中,有一項爲Requests/sec,我們一般稱之爲QPS(每秒請求數),這是一項壓力測試的性能指標,通過這個參數我們可以看出應用程序的吞吐量。