一、簡介
WRK 是一款針對HTTP基准測試工具,即使在單個多核CPU上運行時,也能夠對目標機器產生大量負載。原因是它使用了一些操作系統特定的高性能 io 機制, 比如 select, epoll, kqueue 等。其實它是復用了 redis 的 ae 異步事件驅動框架。說說 wrk 的優缺點吧:
優點:單機並發能力強,極少的線程數即可模擬大量的並發請求。
缺點:不支持分布式,對於上萬用戶的並發測試顯得力不從心。lua 腳本學習成本較高。
二、安裝
執行以下命令:
git clone https://github.com/wg/wrk.git cd wrk make cp wrk /usr/local/bin # 將可執行文件移動到 /usr/local/bin ,方便調用
輸入 wrk -v 檢查安裝是否成功
三、測試
一、get 請求
執行命令:
wrk -t12 -c100 -d10s --timeout=30s --latency https://www.baidu.com
這條壓測命令代表:12個線程 100個 tcp 持續對 https://www.baidu.com 壓測10s,超時時間為30s
壓測結果:
wrk 各項參數詳解:
-c, --connections # tcp 連接數 -d, --duration # 壓測持續時間 -t, --threads # 線程數 -s, --script # 指定 lua 腳本 -H, --header # 為每個HTTP請求添加 hearder --latency # 壓測結束后,打印延時統計信息 --timeout # 超時時間 -v, --version # 打印 wrk 詳細信息
注意:線程數不易設置的過高,官方建議一般為 CPU 核心數的2到4倍最佳,高了會因頻繁切換線程而降低效率。wrk 不是一個連接對應一個線程的模型,而是通過異步網絡 io 提升並發量,也就說是一個線程能管理創建多個 tcp 連接。這就是 wrk 為什么足夠輕量級,但卻可以模擬出大量 tcp 連接的原因。
二、 post 請求
wrk 支持 lua, post 請求壓測需要借助 lua 腳本,編寫腳本,保存 .lua 格式文件
wrk.method = "POST" wrk.headers["Content-Type"] = "application/json" # 需要傳的參數 wrk.body = ""
執行壓測命令:
wrk -t2 -c10 -d5s --timeout=30s --latency -s post.lua https://xxx.xxx.xxx
壓測結果: