【 运维相关】-- 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 讨论可获取最新参数与注意事项。

相关推荐
wewowilling17 分钟前
认识微服务
java·运维·微服务·springcloud
玖石书25 分钟前
Ubuntu 24.04 UFW 全命令攻略:从入门到端口开放实战
linux·运维·ubuntu
weifont2 小时前
自动化抓取和上架商品:能不动手,就少动手
运维·前端·自动化
拂拉氏3 小时前
【知识讲解】 Linux之动静态库的了解
linux·运维·服务器·动静态库
Mikko73 小时前
Linux 重启后日志没了?进程被 OOM 杀了去哪看?logrotate 之后日志还往旧文件写?三台真机实测日志与性能排查
linux·运维·centos
光依旧3 小时前
发版就掉请求?Spring Boot优雅停机的四步
运维·spring boot·nginx·高可用·优雅停机·mcp server
墨神谕4 小时前
RPC框架与HTTP REST的区别
网络协议·http·rpc
yichengerp5 小时前
电子行业常用erp系统有哪些?推荐适合中小电子厂的易呈erp软件,操作简单,易落地
大数据·运维·人工智能·云计算·制造
天国梦5 小时前
国密门禁品牌怎么选?2026年最新3个避坑要点
运维·服务器·数据库·python
Tech探索者5 小时前
没有公网 IP、不会端口映射?用 Natfrp 轻松远程访问家中 NAS
网络协议·tcp/ip·智能路由器