目錄
oha 項目分析(hatoo/oha)
一、概述
二、安裝
三、快速上手
三、常用參數(摘選)
四、輸出解讀(終端 TUI)
五、與其它工具對比
六、最佳實踐
七、注意事項
八、參考
oha 項目分析(hatoo/oha)
一、概述
-
oha 是一個用 Rust 編寫的命令行 HTTP 壓測/負載發生器,主打“快速、輕量、跨平臺、低開銷”。
-
支持高并發連接、固定持續時間或固定請求數模式、限速發壓(按 RPS 限流)、多種輸出(終端可視化 + JSON)。
-
適合本地/單機快速壓測、服務基準驗證、CI 中做回歸性能對比。
二、安裝
-
macOS(Homebrew):
brew install oha
-
Rust(跨平臺):
cargo install oha
-
Nix:
nix-env -iA nixpkgs.oha
-
Windows(Scoop):
scoop install oha
三、快速上手
-
最簡壓測(默認 GET)
oha https://www.baidu.com/
-
固定持續時間與并發
oha -z 30s -c 50 https://api.example.com/endpoint
-
固定請求數
oha -n 10000 -c 20 https://api.example.com/endpoint
-
限速發壓(按 RPS 發送)
oha --rps 200 -z 15s -c 100 https://api.example.com/endpoint
-
POST JSON 示例
oha -m POST -H 'Content-Type: application/json' --body '{"a":1}' https://api.example.com/items
-
從文件讀取請求體
oha -m POST -H 'Content-Type: application/json' --body @payload.json https://api.example.com/items
-
跳過 TLS 校驗(僅用于測試)
oha --insecure https://selfsigned.example.com/
-
輸出 JSON(便于腳本化/歸檔)
oha -z 10s -c 50 --json > result.json
三、常用參數(摘選)
-
-z, --duration <DURATION>
: 壓測持續時間(如 10s、1m)。 -
-c, --concurrency <N>
: 并發連接數/并發度。 -
-n, --requests <N>
: 總請求數(與-z
互斥,二選一)。 -
--rps <N>
: 目標每秒請求數(令牌桶限速發壓)。 -
-m, --method <METHOD>
: HTTP 方法(GET/POST/PUT/DELETE 等)。 -
-H, --header <K:V>
: 自定義請求頭,可重復多次。 -
--body <DATA|@FILE>
: 請求體(直接給字符串或用@file
讀取)。 -
--json
: 以 JSON 輸出詳細結果,便于機器處理。 -
--insecure
: 跳過 TLS 證書校驗(僅測試環境)。 -
--http1/--http2
(以及在部分構建/環境下可用的 HTTP/3): 指定協議版本進行對比測試。 -
--timeout <DURATION>
: 單請求超時時間(如 5s)。
四、輸出解讀(終端 TUI)
-
匯總統計:平均/中位 RPS,請求總數,成功/失敗比,傳輸字節數。
-
狀態碼分布:2xx/3xx/4xx/5xx 各自的數量與占比。
-
延遲分布:p50/p75/p90/p95/p99 等分位點;常見尾延遲定位利器。
-
吞吐與錯誤:req/s、bytes/s、錯誤類型(超時、連接錯誤等)。
-
JSON 輸出中通常包含上述關鍵指標與分布,可用于可視化或基線回歸比對。
五、與其它工具對比
-
wrk:性能強、生態成熟,側重 HTTP/1.1 與 Lua 腳本擴展;oha 上手更快,內置限速與直觀 TUI/JSON 輸出,并注重 HTTP/2 等現代協議。
-
hey:Go 編寫、簡單易用;oha 在限速發壓、TUI 展示與協議能力上更豐富。
-
k6:可編程場景、可分布式與監控集成;適合復雜性能工程。oha 更輕量,適合本地/CI 的快速基準與回歸。
-
ab(ApacheBench):歷史久遠、功能有限;oha/hey/wrk 更推薦。
六、最佳實踐
-
選擇合適模式:推薦以“持續時間”模式(
-z
)為主,避免“請求數”模式將隊列堆滿導致短時抖動。 -
并發與 RPS 配合:先確立目標 RPS(
--rps
),再以并發(-c
)確保能填滿速率但不過度堆積。 -
預熱與穩定期:先進行短預熱,再進入觀測階段收集延遲分布與錯誤率。
-
端到端鏈路:發壓端與被測端網絡應足夠“干凈”,避免本機 CPU/帶寬成為瓶頸;必要時選擇更強機器或分布式發壓。
-
協議對比:同一服務對比
--http1
與--http2
的延遲分布/連接占用差異,定位隊頭阻塞/多路復用行為。 -
結果留存:使用
--json
輸出,結合腳本畫圖或落盤對比基線,便于 CI 回歸檢測。 -
合規與安全:壓測需獲授權,尤其是公網目標;避免觸發風控或影響生產業務。
七、注意事項
-
客戶端能力:單機 CPU、內核參數、文件描述符上限、帶寬、TLS 加密開銷都會限制最大可達 RPS。
-
TLS 與 ALPN:HTTP/2/3 的啟用受證書、ALPN/QUIC 支持影響;若握手異常可先用
--http1
對齊基線。 -
觀測指標:不只關注均值,更要看 p95/p99 尾延遲與錯誤類型變化。
八、參考
-
倉庫:
https://github.com/hatoo/oha
-
README/使用說明、Release 頁面與 issue 討論可獲取最新參數與注意事項。