HTTP 壓測工具 wrk2 安利指南

最近的工做一直在與服務端性能優化打交道,QPS(每秒查詢率)的苛刻要求讓我這個之前也就用 node.js 寫寫博客的人深入地感受到之前作的東西就是個玩具。因此最近也在嘗試瞭解一些壓測方面的知識。對於壓測工具,業界經常使用的有 jmeter、loadrunner、tcpcopy、apache bench、wrk(2) 等。做爲壓測小白,結合項目實際狀況(無需硬件監控、測試請求較簡單),在這裏選擇了上手使用 wrk2。本文記錄了使用過程當中的一些心得體會。html

wrk 簡介

wrk2 基於 wrk 進化而來,咱們能夠先了解一下 wrk 的使用。wrk 類型上與 apache bench(如下簡稱 ab)相似,都是終端上的工具,其使用多線程設計來進行請求的生成。相比 ab,wrk 最值得稱道的應該是它的自定義腳本功能:wrk 支持使用 lua 腳原本進行 HTTP 請求生成、響應處理以及自定義壓測報告等。
在基本的配置項上 wrk 也很是簡單:node

$ wrk
wrk 4.1.0 [kqueue] Copyright (C) 2012 Will Glozer
Usage: wrk <options> <url>
  Options:
    # HTTP 鏈接數
    -c, --connections <N>  Connections to keep open
    # 測試持續時間,如 2s 2m 2h
    -d, --duration    <T>  Duration of test
    # 開啓的線程數
    -t, --threads     <N>  Number of threads to use
    
    # 進階功能,使用 lua 腳本
    -s, --script      <S>  Load Lua script file
    
    # 添加請求頭,如 "User-Agent: wrk"
    -H, --header      <H>  Add header to request
    
        # 打印詳細延遲統計
        --latency          Print latency statistics
        
        # 設置請求超時時間,大於該時間的請求將被記錄
        --timeout     <T>  Socket/request timeout

對 url http://127.0.0.1:8080/index.html 進行開啓 12 個線程,打開 400 個 HTTP 鏈接,持續 30s 的壓測,可表示以下:git

wrk -t12 -c400 -d30s http://127.0.0.1:8080/index.html

壓測結束後產出的報告內容也還比較詳細,都是一些壓測方比較關心的數據,好比延遲分佈、QPS 等,這裏就不過多贅述。github

自定義腳本功能

若是 wrk 常規的功能沒法知足需求,那麼這時就須要用戶自行編寫腳本去進行處理。wrk 官方提供了一些示例腳本以供參考。固然首先咱們要掌握基本的 lua 語法,而後須要參考 wrk 暴露出的 lua 接口。wrk 在 setup、running、done 三個聲明週期內暴露了許多方法,分別用於線程的配置、請求和響應的處理以及自定義展現最終生成的測試報告。結合腳本,wrk 可以完成至關程度的複雜壓測需求。不少 wrk 的教程對此處並無詳細說明,但我的認爲這裏纔是 wrk 的精華所在。若是想熟練上手使用,應當對自定義腳本的使用有所瞭解。shell

例如,若是想對每一個請求增長必定延時,可在 wrk 暴露出的 delay 函數中進行設置:apache

function delay()
   return math.random(10, 50)
end

或者你想對 post 請求做壓測,則能夠對 table wrk 進行設置:性能優化

wrk.method = "POST"
wrk.body   = "foo=bar&baz=quux"
wrk.headers["Content-Type"] = "application/x-www-form-urlencoded"

wrk2

wrk2 是 wrk 的進化版,其號稱可以提供穩定的吞吐量以及更精確的延時統計,反映到配置參數上就是 wrk2 增長了 --rate 參數用於設置吞吐量和--u_latency 參數用於顯示不正確(統計學角度)的延時統計。其餘使用上 wrk2 與 wrk 區別不大,算是更加完善的工具。固然 wrk2 的做者十分謙虛,字裏行間流露出對 wrk 滿滿的崇敬之情,哈哈。多線程

完。app

本文首發於個人博客(點此查看),歡迎關注。dom

相關文章
相關標籤/搜索