【 运维相关】-- HTTP 压测/负载发生器之新秀 oha

目录

[oha 项目分析(hatoo/oha)](#oha 项目分析(hatoo/oha))

一、概述

二、安装

三、快速上手

三、常用参数(摘选)

[四、输出解读(终端 TUI)](#四、输出解读(终端 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 讨论可获取最新参数与注意事项。

相关推荐
IPdodo_3 小时前
跨境 API 调用不稳定怎么办:出口、超时重试与链路监控的实践
网络·python·网络协议
Madison-No73 小时前
搭建项目测试环境
linux·运维·服务器·python
吴声子夜歌4 小时前
Shell编程实例——编写安全的shell脚本(二)
linux·运维·shell
悠悠121385 小时前
微服务通信别只看性能:REST 与 gRPC 的 6 个选型判断和一次 502 故障复盘
运维·服务器
zx_741484817 小时前
【Linux入门】Shell 函数、正则表达式与文本处理:cut 与 awk
linux·运维·正则表达式
Zenova EdgeOS7 小时前
Linux dmesg 工业边缘实战:内核日志过滤、持久化与故障定位
linux·运维·边缘计算·工业边缘·dmesg·内核日志
wdfk_prog8 小时前
ROS教程08:从 TransportTCP::connect() 追到 TCPROS Connection Header、序列化与 Socket 数据传输
运维·缓存·docker·容器·ros
做运维的阿瑞8 小时前
Python 标准库汇总:分类速览与常用模块清单
linux·运维·python
碳基修炼9 小时前
排查记:本地 devServer 是 http,浏览器却把 302 重定向升级成了 https
前端·http
日常筹谋记9 小时前
自动化仓储安全防护工况评估:明治传感器AS-33C技术适配性分析
大数据·运维·创业创新·业界资讯