輕量級性能測試工具 wrk

在完成一個接口開發後,在交給測試工程師之前,經常也會想知道,自己寫的這個接口的性能如何呢?吞吐量能達到多少?QPS(query-per-second 每秒處理完的請求數) 能達到多少呢?

常用的性能測試工具,如 Apache ab, Apache JMeter (互聯網公司用的較多),LoadRunner 等

github: https://github.com/wg/wrk

what is wrk?

wrk 是一款針對 Http 協議的基準測試工具,它能夠在單機多核 CPU 的條件下,使用系統自帶的高性能 I/O 機制,如 epoll,kqueue 等,通過多線程和事件模式,對目標機器產生大量的負載。

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

優點:
輕量級性能測試工具;

安裝簡單(相對 Apache ab 來說);
學習曲線基本爲零,幾分鐘就能學會咋用了;
基於系統自帶的高性能 I/O 機制,如 epoll, kqueue, 利用異步的事件驅動框架,通過很少的線程就可以壓出很大的併發量;

缺點:
wrk 目前僅支持單機壓測,後續也不太可能支持多機器對目標機壓測,因爲它本身的定位,並不是用來取代 JMeter, LoadRunner 等專業的測試工具,wrk 提供的功能,對我們後端開發人員來說,應付日常接口性能驗證還是比較友好的

安裝:

CentOS

sudo yum groupinstall 'Development Tools'
sudo yum install -y openssl-devel git 
git clone https://github.com/wg/wrk.git wrk
cd wrk
make
# 將可執行文件移動到 /usr/local/bin 位置
sudo cp wrk /usr/local/bin



MacOS
brew install wrk

驗證:
wrk -v

如何使用:

使用方法: 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)

PS: 關於線程數,並不是設置的越大,壓測效果越好,線程設置過大,反而會導致線程切換過於頻繁,效果降低,一般來說,推薦設置成壓測機器 CPU 核心數的 2 倍到 4 倍就行了。

簡單使用案例:

wrk -t12 -c400 -d30s http://www.baidu.com
這條命令表示,利用 wrk 對 www.baidu.com 發起壓力測試,線程數爲 12,模擬 400 個併發請求,持續 30 秒。

Host:~ liuge36$ wrk -t12 -c400 -d10s http://127.0.0.1:8900/test
Running 10s test @ http://127.0.0.1:8900/test
  12 threads and 400 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency    14.88ms   27.77ms 321.47ms   94.47%
    Req/Sec     1.69k     1.26k    4.04k    50.04%
  200054 requests in 10.10s, 22.93MB read
  Socket errors: connect 155, read 196, write 0, timeout 0
Requests/sec:  19813.39  # 平均每秒處理請求數
Transfer/sec:      2.27MB
Host:~ liuge36$ 

參考:https://www.cnblogs.com/quanxiaoha/p/10661650.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章