目录
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 讨论可获取最新参数与注意事项。