目录

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/921946.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/921946.shtml
英文地址,请注明出处:http://en.pswp.cn/news/921946.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

淘宝闪购基于FlinkPaimon的Lakehouse生产实践:从实时数仓到湖仓一体化的演进之路

摘要&#xff1a;本文整理自淘宝闪购(饿了么)大数据架构师王沛斌老师在 Flink Forward Asia 2025 城市巡回上海站的分享。引言在数字化转型的浪潮中&#xff0c;企业对实时数据处理的需求日益增长。传统的实时数仓架构在面对业务快速变化和数据规模爆炸性增长时&#xff0c;逐渐…

Android应用添加日历提醒功能

功能 在安卓应用里调用系统日历&#xff0c;直接创建一个带提醒的日历事件&#xff0c;甚至不需要跳转到日历界面&#xff0c;只需要获取系统日历的读取权限即可。 需要的权限 在AndroidManifest.xml里添加 <uses-permission android:name"android.permission.READ_CAL…

‌Git Bisect 二分查找定位错误总结

# Git Bisect 二分查找指南## 1. 基本原理&#xff08;ASCII示意图&#xff09; 假设提交历史是一条时间线&#xff0c;Ggood&#xff08;正常&#xff09;&#xff0c;Bbad&#xff08;异常&#xff09;&#xff1a;提交顺序: G --- G --- G --- B --- B --- B | | | 初始正常…

ThingsKit物联网平台 v2.0.0 发布|前端UI重构、底层架构升级

v2.0.0 Release发布日期&#xff1a;2025/08/25 代码标签&#xff1a;v2.0.0_Release&#x1f947; 新增功能国标级联&#xff08;支持上级、下级国标级联&#xff09;视频回放、录像计划&#xff08;用户可以通过录像计划生成对应的视频回放并查看&#xff09;Modbus_TCP协…

Lua > Mac Mini M4安装openresty

Mac Mini M4安装openresty 主要参考 https://www.cnblogs.com/helios-fz/p/15703260.html brew uninstall nginxbrew update brew install pcre openssl #brew install geoip# brew tap openresty/brew # brew install openresty # brew install openresty/brew/openresty# VER…

【多线程案例】:单例模式

多线程案例8.1 单例模式饿汉模式懒汉模式懒汉模式-单线程版懒汉模式-多线程版懒汉模式-多线程版(改进)8.1 单例模式 单个实例. 在一个 java 进程中, 要求指定的类,只能有唯–个实例。&#xff08;尝试 new 多个实例的时候, 就会直接编译报错&#xff09; 单例模式是校招中最常…

【Python/Pytorch】-- 贝叶斯定理

文章目录 文章目录01 贝叶斯定理的理解02 在MRI重建领域应用01 贝叶斯定理的理解 贝叶斯定理的基本公式&#xff1a;P(A|B)P(B|A)*P(A) / P(B) 首先是如何理解这个公式&#xff1f; 在B事件发生的条件下&#xff0c;A发生的概率 P(A|B) 在B事件发生的条件下&#xff0c;A和B同…

子网掩码的隐形陷阱:为何能ping通却无法HTTPS访问

问题现象深度解析在近期企业网络维护中&#xff0c;运维团队发现一个具有教学意义的典型案例&#xff1a;某台部署在10.165.111.0/24网段的业务服务器&#xff08;10.165.111.71&#xff09;可以成功ping通目标中间件主机(10.165.110.11)&#xff0c;但通过HTTPS协议访问https:…

【ArcGIS】如何编辑图层的属性表

GIS按属性选择后删除所选项呈现灰色_arcgis删除字段灰色-CSDN博客

大数据各组件flume,datax,presto,DolphinScheduler,findBI在大数据数仓架构中的作用和功能。

一、数据仓库核心价值铺垫在讲具体技术前&#xff0c;先明确数据仓库&#xff08;Data Warehouse&#xff0c;简称数仓&#xff09; 的核心作用&#xff1a; 数据仓库是 “整合企业多源数据、按业务主题组织、支持决策分析” 的结构化数据存储体系&#xff0c;核心价值是打破数…

React From表单使用Formik和yup进行校验

一、Formik的使用 官方文档地址&#xff1a;https://formik.org/docs/tutorial#validation 首先安装依赖 yarn add formik2.导入并初始化 import { useFormik } from formik; initialValues&#xff1a;初始化 输入框的密码和账号 onSubmit&#xff1a;当点击提交按钮时&am…

netty-scoket.io路径配置

1、服务端代码 package com.yh.service.socket;import com.corundumstudio.socketio.SocketIOServer; import com.corundumstudio.socketio.store.RedissonStoreFactory; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory…

20250910荣品RD-RK3588-MID开发板在Android13系统下解决点卡迪的屏闪屏的问题

20250910荣品RD-RK3588-MID开发板在Android13系统下解决点卡迪的屏闪屏的问题 2025/9/5 15:44缘起&#xff1a;荣品RD-RK3588-MID开发板在Android13系统下解决点卡迪的屏。 按 POWER按键 关机之后&#xff0c;2s之内再次短按 POWER按键&#xff0c;开机之后屏会抖动。 2s后短按…

正态分布 - 计算 Z-Score 的 无偏估计

正态分布 - 计算 Z-Score 的 无偏估计 flyfish Z-Score公式与计算步骤 1 公式&#xff08;样本Z-Score&#xff09; 实际应用中&#xff0c;我们几乎不知道“总体均值/标准差”&#xff0c;所以常用样本数据计算&#xff1a; zixi−xˉsz_i \frac{x_i - \bar{x}}{s}zi​sxi​−…

ai生成文章,流式传输(uniapp,微信小程序)

1.环境nutui-uniappvue3tsunocss2.功能源码包含ai生成逻辑&#xff0c;内容生成实时打字机功能&#xff0c;ai数据处理等<script setup lang"ts"> import {queryAIParams, } from /api/pagesA import { submitFn } from /api/aiimport Navbar from /component…

Linux设备内存不足如何处理

[rootlocalhost ~]# free -mtotal used free shared buff/cache available Mem: 31208 14317 1280 1551 15610 14657 Swap: 15927 2781 13146 [rootlocalhost ~]#从 free -m 输出来看&…

中间件八股

文章目录RedisRedis为什么快&#xff1f;Redis Redis为什么快&#xff1f; 首先它是内存数据库&#xff0c;所有数据直接操作内存而非磁盘&#xff0c;避免了 I/O 瓶颈&#xff1b;其次采用单线程模型&#xff0c;消除了多线程切换的开销&#xff0c;同时通过非阻塞 I/O 多路…

【参数详解与使用指南】PyTorch MNIST数据集加载

# 加载MNIST数据集 train_dataset datasets.MNIST(root./data, trainTrue, downloadTrue, transformtransform) # 下载训练集 test_dataset datasets.MNIST(root./data, trainFalse, downloadTrue, transformtransform) # 下载测试集在深度学习入门过程中&#xff0c;MNIST手…

闭包面试题

闭包&#xff08;Closure&#xff09; 是指一个函数能够记住并访问其词法作用域&#xff08;定义时的作用域&#xff09;&#xff0c;即使该函数在其词法作用域之外执行。一、通俗理解&#xff08;面试可这样开头&#xff09;&#xff1a;> 闭包就是一个函数“记住”了它出生…

WebSocket 双向通信实战:SCADA 移动端实时操控响应优化

引言&#xff1a;SCADA 移动端的 “延迟烦恼” 与破局之道在电力调度、水厂监控、智能制造等场景中&#xff0c;SCADA 系统&#xff08;数据采集与监视控制系统&#xff09;是当之无愧的 “工业指挥官”—— 它能实时采集设备运行数据&#xff08;如电网负荷、水泵压力、机床转…