在進行任何 Web 應用程序開發之前,都需要對其進行壓力測試。如果在生產環境中出現負載過高或響應速度緩慢,那麼可能會導致用戶的不滿或應用程序的崩潰。此時,可以使用 wrk 工具對應用程序進行壓力測試以獲取它的性能數據。本文將深入淺出地介紹 wrk 工具。
一、wrk 壓測工具
wrk 是一個高性能的 HTTP 壓力測試工具。它使用 C 語言編寫,可以模擬大量用戶同時訪問 Web 應用程序,並提供關於應用程序在高負載下的性能數據。 wrk 通過 OpenResty 中的 LuaJIT 引擎實現的高效 IO 多路復用(epoll 或 kqueue),可以同時發起多個 HTTP 請求,模擬真實的負載,從而檢查服務器的性能和響應能力,包括請求的速度、錯誤的數量和服務器的吞吐量等指標。
wrk 有以下優點:
1.高性能、低消耗:處理多線程,使用了基於 I/O 多路復用的高效機制,可以充分發揮性能;
2.支持多種參數設置,支持自定義請求方式和請求頭;
3.簡單易用,支持自定義報告輸出格式。
二、wrk 壓測有 timeout 怎麼處理
在 wrk 壓力測試中,當一個請求沒有在一定的時間內得到響應時,它就會超時並放棄對服務器的請求。因此,處理 timeout 是必須的。wrk 可以使用以下參數設置 timeout:
--timeout Socket/request timeout in ms (default: 2000)
以上命令行選項將請求的超時時間設置為 2 秒。如果超時時間過長,則會造成資源浪費和不準確的測試結果。
三、wrk 壓測報錯
在使用 wrk 進行壓力測試時,可能會遇到以下報錯信息:
- ERROR: Connect timed out
- WARN: Response timeout for
- ERROR: Failed to read response
- ERROR: Connection reset by peer
- 等等…
這些報錯信息通常表示服務器響應速度慢、網絡傳輸出現問題或者服務器存在配置問題等。解決方法如下:
- 嘗試使用 -H 參數設置合適的請求頭;
- 檢查服務器是否出於高負載狀態或是否存在其他應用程序導致了計算機的高負載情況;
- 優化 / 調整服務器網絡配置、操作系統和應用程序配置。
四、wrk 壓測比別的工具高
wrk 和很多其他壓測工具相比,具有很多優點:
- wrk 支持 HTTP 和 HTTPS 協議;
- wrk 並非僅僅做測量,而是在並發中工作,模擬真實的請求;
- 相比 Jmeter 和 ApacheBench,wrk 消耗更少的資源,可輕鬆模擬大量並發請求;
- wrk 是基於 LuaJIT 和 OpenResty 構建的,可以使用並發性更好和更穩定的 CIO 處理請求;
- wrk 可以配置要測試的 URL 數組和相應的權重,然後通過這些 URL 和特定權重的組合向服務器發送請求。
五、wrk 壓測 TPS 新建 並發 吞吐
wrk 有三個主要的關鍵指標:TPS、並發和吞吐量,將它們簡單歸納如下:
- TPS(每秒事務數):每秒鐘服務器能夠處理的請求數;
- 並發(Concurrence):模擬使用的並發用戶數量
- 吞吐量(Transfer rate):系統在運行時的總體繁忙程度
使用以下參數可以獲取 TPS、並發和吞吐量數值等信息:
wrk -c 1000 -t 10 -d 60s http://localhost:8000
以上命令將在 10 個線程、1000 並發連接和 60 秒的時間內模擬對 http://localhost:8000 的請求。指定具體的 TPS 參數和其他輸出格式可以使用 wrk 的第三方腳本,例如 wrk2report.py 等。
六、wrk 壓測時候 qps 一直上不去
當 wrk 的測試結果中 qps 值非常低或出現 qps 持續低於該默認值時,可能有以下原因:
- 模擬的用戶數量太少,需要增加一些線程以增加並發數;
- 服務器端的配置不能滿足測試需求,需要檢查並更改;
- 應用程序沒有足夠的數據源或者沒有合適的數據源,需要增加或修改測試數據;
- wrk 的操作有誤,需要適當修改它的參數。
針對以上問題,可以增加線程數量、檢查並更改服務器端配置、增加或修改測試數據、修改 wrk 的參數。
總結
wrk 是一個高效的 HTTP 壓力測試工具,支持多種自定義參數設置,測試結果準確,可以測量 TPS、並發、吞吐量等最為關鍵的指標。在使用該工具時,需要根據具體情況設置參數,處理 timeout、錯誤等問題,並及時優化測試結果,才能為生產環境中的應用程序提供強大的性能保障和優化手段。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/195532.html