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

相关推荐
翼龙云_cloud6 分钟前
云代理商:Hermes Agent在量化交易中的实战应用
运维·服务器·人工智能·ai智能体·hermes agent
yqcoder12 分钟前
HTTP 进化论:从“单车道土路”到“磁悬浮列车”
网络·网络协议·http
发光小北15 分钟前
Profinet 转 Profibus DP 主站网关如何应用?
网络协议
无限进步_20 分钟前
【Linux】Makefile:让编译自动化
linux·运维·自动化
Jinkxs23 分钟前
LoadBalancer- 简单限流策略:Nginx 基于连接 / 请求的限流实现
java·运维·nginx
流浪00131 分钟前
告别静态打印:Linux C 实现实时刷新进度条
linux·运维·c语言
qq_1969761733 分钟前
硬核教程:用Gemini境像站构建端到端自动化办公工作流,告别重复操作(国内免费镜像实测)
运维·自动化
小此方33 分钟前
Re:Linux系统篇(二十)进程篇·五:深入理解 Linux 进程优先级:从底层逻辑到实战修改
linux·运维·服务器
流浪00138 分钟前
Linux篇(八) Make 与 Makefile 超详细入门教程|从零基础到手写自动化编译
linux·运维·自动化
j_xxx404_43 分钟前
Linux线程:从内存分页机制(Page Table/TLB/Page Fault)彻底读懂 Linux 线程本质
linux·运维·服务器·开发语言·c++·人工智能·ai