【 運維相關】-- HTTP 壓測/負載發生器之新秀 oha

目錄

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 討論可獲取最新參數與注意事項。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/921946.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/921946.shtml
英文地址,請注明出處:http://en.pswp.cn/news/921946.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

淘寶閃購基于FlinkPaimon的Lakehouse生產實踐:從實時數倉到湖倉一體化的演進之路

摘要&#xff1a;本文整理自淘寶閃購(餓了么)大數據架構師王沛斌老師在 Flink Forward Asia 2025 城市巡回上海站的分享。引言在數字化轉型的浪潮中&#xff0c;企業對實時數據處理的需求日益增長。傳統的實時數倉架構在面對業務快速變化和數據規模爆炸性增長時&#xff0c;逐漸…

Android應用添加日歷提醒功能

功能 在安卓應用里調用系統日歷&#xff0c;直接創建一個帶提醒的日歷事件&#xff0c;甚至不需要跳轉到日歷界面&#xff0c;只需要獲取系統日歷的讀取權限即可。 需要的權限 在AndroidManifest.xml里添加 <uses-permission android:name"android.permission.READ_CAL…

?Git Bisect 二分查找定位錯誤總結

# Git Bisect 二分查找指南## 1. 基本原理&#xff08;ASCII示意圖&#xff09; 假設提交歷史是一條時間線&#xff0c;Ggood&#xff08;正常&#xff09;&#xff0c;Bbad&#xff08;異常&#xff09;&#xff1a;提交順序: G --- G --- G --- B --- B --- B | | | 初始正常…

ThingsKit物聯網平臺 v2.0.0 發布|前端UI重構、底層架構升級

v2.0.0 Release發布日期&#xff1a;2025/08/25 代碼標簽&#xff1a;v2.0.0_Release&#x1f947; 新增功能國標級聯&#xff08;支持上級、下級國標級聯&#xff09;視頻回放、錄像計劃&#xff08;用戶可以通過錄像計劃生成對應的視頻回放并查看&#xff09;Modbus_TCP協…

Lua > Mac Mini M4安裝openresty

Mac Mini M4安裝openresty 主要參考 https://www.cnblogs.com/helios-fz/p/15703260.html brew uninstall nginxbrew update brew install pcre openssl #brew install geoip# brew tap openresty/brew # brew install openresty # brew install openresty/brew/openresty# VER…

【多線程案例】:單例模式

多線程案例8.1 單例模式餓漢模式懶漢模式懶漢模式-單線程版懶漢模式-多線程版懶漢模式-多線程版(改進)8.1 單例模式 單個實例. 在一個 java 進程中, 要求指定的類,只能有唯–個實例。&#xff08;嘗試 new 多個實例的時候, 就會直接編譯報錯&#xff09; 單例模式是校招中最常…

【Python/Pytorch】-- 貝葉斯定理

文章目錄 文章目錄01 貝葉斯定理的理解02 在MRI重建領域應用01 貝葉斯定理的理解 貝葉斯定理的基本公式&#xff1a;P(A|B)P(B|A)*P(A) / P(B) 首先是如何理解這個公式&#xff1f; 在B事件發生的條件下&#xff0c;A發生的概率 P(A|B) 在B事件發生的條件下&#xff0c;A和B同…

子網掩碼的隱形陷阱:為何能ping通卻無法HTTPS訪問

問題現象深度解析在近期企業網絡維護中&#xff0c;運維團隊發現一個具有教學意義的典型案例&#xff1a;某臺部署在10.165.111.0/24網段的業務服務器&#xff08;10.165.111.71&#xff09;可以成功ping通目標中間件主機(10.165.110.11)&#xff0c;但通過HTTPS協議訪問https:…

【ArcGIS】如何編輯圖層的屬性表

GIS按屬性選擇后刪除所選項呈現灰色_arcgis刪除字段灰色-CSDN博客

大數據各組件flume,datax,presto,DolphinScheduler,findBI在大數據數倉架構中的作用和功能。

一、數據倉庫核心價值鋪墊在講具體技術前&#xff0c;先明確數據倉庫&#xff08;Data Warehouse&#xff0c;簡稱數倉&#xff09; 的核心作用&#xff1a; 數據倉庫是 “整合企業多源數據、按業務主題組織、支持決策分析” 的結構化數據存儲體系&#xff0c;核心價值是打破數…

React From表單使用Formik和yup進行校驗

一、Formik的使用 官方文檔地址&#xff1a;https://formik.org/docs/tutorial#validation 首先安裝依賴 yarn add formik2.導入并初始化 import { useFormik } from formik; initialValues&#xff1a;初始化 輸入框的密碼和賬號 onSubmit&#xff1a;當點擊提交按鈕時&am…

netty-scoket.io路徑配置

1、服務端代碼 package com.yh.service.socket;import com.corundumstudio.socketio.SocketIOServer; import com.corundumstudio.socketio.store.RedissonStoreFactory; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory…

20250910榮品RD-RK3588-MID開發板在Android13系統下解決點卡迪的屏閃屏的問題

20250910榮品RD-RK3588-MID開發板在Android13系統下解決點卡迪的屏閃屏的問題 2025/9/5 15:44緣起&#xff1a;榮品RD-RK3588-MID開發板在Android13系統下解決點卡迪的屏。 按 POWER按鍵 關機之后&#xff0c;2s之內再次短按 POWER按鍵&#xff0c;開機之后屏會抖動。 2s后短按…

正態分布 - 計算 Z-Score 的 無偏估計

正態分布 - 計算 Z-Score 的 無偏估計 flyfish Z-Score公式與計算步驟 1 公式&#xff08;樣本Z-Score&#xff09; 實際應用中&#xff0c;我們幾乎不知道“總體均值/標準差”&#xff0c;所以常用樣本數據計算&#xff1a; zixi?xˉsz_i \frac{x_i - \bar{x}}{s}zi?sxi??…

ai生成文章,流式傳輸(uniapp,微信小程序)

1.環境nutui-uniappvue3tsunocss2.功能源碼包含ai生成邏輯&#xff0c;內容生成實時打字機功能&#xff0c;ai數據處理等<script setup lang"ts"> import {queryAIParams, } from /api/pagesA import { submitFn } from /api/aiimport Navbar from /component…

Linux設備內存不足如何處理

[rootlocalhost ~]# free -mtotal used free shared buff/cache available Mem: 31208 14317 1280 1551 15610 14657 Swap: 15927 2781 13146 [rootlocalhost ~]#從 free -m 輸出來看&…

中間件八股

文章目錄RedisRedis為什么快&#xff1f;Redis Redis為什么快&#xff1f; 首先它是內存數據庫&#xff0c;所有數據直接操作內存而非磁盤&#xff0c;避免了 I/O 瓶頸&#xff1b;其次采用單線程模型&#xff0c;消除了多線程切換的開銷&#xff0c;同時通過非阻塞 I/O 多路…

【參數詳解與使用指南】PyTorch MNIST數據集加載

# 加載MNIST數據集 train_dataset datasets.MNIST(root./data, trainTrue, downloadTrue, transformtransform) # 下載訓練集 test_dataset datasets.MNIST(root./data, trainFalse, downloadTrue, transformtransform) # 下載測試集在深度學習入門過程中&#xff0c;MNIST手…

閉包面試題

閉包&#xff08;Closure&#xff09; 是指一個函數能夠記住并訪問其詞法作用域&#xff08;定義時的作用域&#xff09;&#xff0c;即使該函數在其詞法作用域之外執行。一、通俗理解&#xff08;面試可這樣開頭&#xff09;&#xff1a;> 閉包就是一個函數“記住”了它出生…

WebSocket 雙向通信實戰:SCADA 移動端實時操控響應優化

引言&#xff1a;SCADA 移動端的 “延遲煩惱” 與破局之道在電力調度、水廠監控、智能制造等場景中&#xff0c;SCADA 系統&#xff08;數據采集與監視控制系統&#xff09;是當之無愧的 “工業指揮官”—— 它能實時采集設備運行數據&#xff08;如電網負荷、水泵壓力、機床轉…