资讯动态

多机分布式压测:如何组合多个Hey实例打出超大流量并汇总结果

发布时间:2026/10/3 12:51:25 来源:尧图企业网站定制
多机分布式压测如何组合多个Hey实例打出超大流量并汇总结果【免费下载链接】heyHTTP load generator, ApacheBench (ab) replacement项目地址: https://gitcode.com/GitHub_Trending/he/heyhey是一款轻量级的 HTTP 压测工具ApacheBench 的替代品单条命令即可发起大规模请求并输出 RPS、延迟百分位等完整报告。当单机压测流量不够时本文讲解多机分布式压测的完整方法如何组合多个 hey 实例打出超大流量并准确汇总各机器的压测结果。一、先理解 hey 的并发模型单机瓶颈在哪里hey 的压测执行逻辑非常直观见 requester/requester.go启动时创建-c个 Worker每个 Worker 是一个独立 goroutine总请求数-n被均分给每个 Worker每个 Worker 发送N/C个请求所有 Worker 共享同一个 HTTP Client 和连接池因此并发数越高单机网卡、CPU、文件描述符越容易先被打满限速参数-q是每个 Worker的 QPS不是整机 QPS。结论单台压测机的天花板 它的带宽 × CPU × 连接能力。要打出更大流量最稳妥的方式就是横向扩容——让多台机器各自运行 hey 实例共同指向目标接口。参数含义速查完整说明见 hey.go参数作用分布式压测中的含义-n总请求数每台机器的请求预算-c并发 Worker 数单机的火力档位-q单 WorkerQPS 上限整 QPS ≈ 机器数 ×-c×-q-z持续时长如60s指定后忽略-n保证各机器压测时间对齐-o csv输出逐请求 CSV 明细汇总结果的关键见第四节二、压测机准备三种安装方式方式 1直接下载预编译二进制Linux/macOS/Windows 均有发布包macOS 也可直接brew install hey。方式 2源码构建git clone https://gitcode.com/GitHub_Trending/he/hey cd hey make release # 产物在 ./bin/ 下见 [Makefile](https://link.gitcode.com/i/2f551eae231fe400de18655c31ad222f)方式 3Docker 镜像推荐多机部署最省事仓库自带 Dockerfile构建出的镜像基于scratch极小且无系统依赖docker build -t hey-loader .✅ 使用 Docker 的好处每台压测机环境完全一致避免不同机器 hey 版本/参数差异污染结果。三、启动分布式压测集群方法一SSH 并行下发最常用在一台控制机上对每台压测机并行执行相同参数的压测命令并把 CSV 结果拉回本地for host in 10.0.0.11 10.0.0.12 10.0.0.13; do ssh root$host hey -n 20000 -c 200 -z 60s -o csv https://api.example.com/health hey_$host.csv done wait方法二容器化批量拉起压测机均已准备 Docker 时一条命令即可docker run --rm --network host hey-loader \ -n 20000 -c 200 -z 60s -o csv https://api.example.com/health node1.csv在 K8s 环境中可以用一个 CronJob/Job 模板批量创建 N 个 Pod 达到同样效果。总流量怎么算假设4 台压测机每台-c 200 -q 50计算项公式结果单机 QPS-c×-q200 × 50 10,000集群总 QPS单机 QPS × 机器数10,000 × 4 40,000 QPS不指定-q时流量上限由并发数和单机带宽决定各机器之间会略有波动这是正常现象。四、汇总多机压测结果两种做法hey 默认输出人类可读的 SummaryRPS、直方图、10~99 分位延迟、各阶段耗时统计实现见 requester/report.go。多机汇总有两种思路做法一汇总表对比快速判断把每台机器的 Summary 关键指标抄进一张表压测机RPS平均延迟P95P99错误数10.0.0.119,82012.1ms28ms61ms010.0.0.129,76412.4ms29ms63ms210.0.0.139,91011.8ms27ms58ms0⚠️ 注意百分位数不能直接求平均。三台机器 P99 的均值≠全局 P99。汇总表适合快速看大盘精确分位请用做法二。做法二合并 CSV 明细算全局指标精确使用-o csv后hey 会输出每一笔请求的 8 列明细定义见 requester/print.go列含义response-time请求总耗时秒DNSdialup / DNSTCP 建连 / DNS 解析耗时Request-write写完整请求耗时Response-delay等待首字节耗时Response-read读完响应耗时status-code响应状态码offset请求开始时间相对压测起点的偏移秒合并所有机器的 CSV一行命令算出全局P99 与总请求量# 取每台机器CSV的第2列(response-time)合并后计算全局P99 cat node*.csv | tail -n 2 | cut -d, -f1 | sort -n | \ awk {a[NR]$1} END{printf 总请求数%d 全局P99%.0fms\n, NR, a[int(NR*0.99)]*1000}同时建议检查两点status-code 列统计各机器的非 2xx 比例定位哪台压测机网络异常offset 列各机器 offset 序列都应从 0 附近开始若明显错位说明启动时间不同步见下节。小提醒hey 最多记录 100 万条明细requester/report.go超大流量下请控制-n或按机器分片落盘。五、分布式压测避坑清单坑说明对策时钟不同步各机器 offset 漂移汇总曲线对不齐压测前chrony/ntp校时压测机带宽成瓶颈单机网卡先于目标服务打满测不出真实能力观察压测机iftop及时加机器连接池上限空闲连接池上限为min(并发数, 500)requester/requester.go超大规模并发时留意长尾延迟超时默认 20s慢接口会被记为错误用-t按场景调大或设 0容器 CPU 被限压测机自身被限流导致流量不稳压测 Pod 设cpu limit足够大或用宿主机目标限流/防火墙压测机 IP 段被 WAF 拦截大量 429/403提前报备压测源 IP 段六、写在最后hey 虽然是一个小而美的单二进制工具但凭借Worker 并发模型 QPS 限速 CSV 明细输出天然适合拼装成多机分布式压测集群每台机器一个 hey 实例横向扩容即可线性放大流量再用 CSV 合并得到全局精确指标。核心流程一句话总结N 台机器并行 hey统一-c/-q/-z参数→ 各机-o csv落盘 → 合并明细计算全局 RPS 与分位延迟。关键源码与文档索引参数与用法总览hey.go、README.mdWorker 调度与 QPS 限速requester/requester.go报告统计与百分位计算requester/report.goCSV 列定义requester/print.go容器化部署Dockerfile、Makefile【免费下载链接】heyHTTP load generator, ApacheBench (ab) replacement项目地址: https://gitcode.com/GitHub_Trending/he/hey创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑