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

相关推荐
DONG9992 小时前
ubuntu 22 安装轻量级桌面Xfce并使用xrdp远程桌面连接
linux·运维·ubuntu
東雪蓮☆3 小时前
从零开始掌握 Web 与 Nginx:入门详解
运维·服务器·前端·nginx
Miraitowa_cheems4 小时前
LeetCode算法日记 - Day 38: 二叉树的锯齿形层序遍历、二叉树最大宽度
java·linux·运维·算法·leetcode·链表·职场和发展
青铜发条4 小时前
【python】python进阶——网络编程
运维·服务器·网络
勇闯逆流河4 小时前
【Linux】Linux常用指令合集
linux·运维·服务器
宇钶宇夕4 小时前
西门子 S7-200 SMART PLC: 3 台电机顺启逆停控制(下篇):逆序停止与安全保障实现
运维·自动化
的小姐姐4 小时前
RMS设备检修管理系统_HawkEye智能运维平台_璞华大数据
大数据·运维
AD钙奶-lalala4 小时前
HTTP response code 200 206 416详解
网络·网络协议·http
sun03224 小时前
使用 javax.net.ssl.HttpsURLConnection 发送 HTTP 请求_以及为了JWT通信选用OSS的Jar的【坑】
http·.net·ssl