Hey压测清单:从环境准备到结果归档的8个标准步骤(附检查表)
【免费下载链接】heyHTTP load generator, ApacheBench (ab) replacement项目地址: https://gitcode.com/GitHub_Trending/he/hey
Hey 是一款轻量级的HTTP 压测工具(HTTP load generator),也是 ApacheBench(ab)的现代化替代品。它用一条命令就能发起并发请求,并自动输出响应时间直方图、延迟分布(P50/P95/P99)和状态码统计。本文将 hey 压测拆成8 个标准步骤,并附一份可对照执行的检查表,帮助新手快速完成一次规范的接口压测。
1. 环境准备:安装 Hey 压测工具
开始压测前,先确认压测机已装好 hey。支持三种安装方式:
| 方式 | 适用平台 | 说明 |
|---|---|---|
| 直接下载二进制 | Linux / macOS / Windows | 官方发布单文件,无需依赖 |
| Homebrew | macOS | 执行brew install hey |
| Docker 镜像 | 所有平台 | 基于 Dockerfile 构建,自带 CA 证书,以非 root 用户运行 |
如果从源码构建,Makefile 中已提供release目标,可一键交叉编译出 Windows、Linux、macOS 三个平台的可执行文件。
💡 检查点:压测机与被测服务之间网络畅通,且压测机 CPU 不是瓶颈。hey 默认使用 8 核(
-cpus可调,见 hey.go),核数不足时结果会失真。
2. 基线测试:用默认参数发一次"小炮"
正式加压前,先用默认参数对目标 URL 打一次请求,验证连通性、认证和状态码是否正常。hey 默认发送 200 个请求、50 并发(默认值定义见 hey.go)。
这一轮只回答两个问题:
- 能否正常访问(状态码是否全为 200)?
- 平均延迟处于什么量级?
3. 确定压测模型:n、c、q、z 四参数
hey 通过四个核心参数描述压力模型:
-n:总请求数(默认 200)-c:并发 worker 数(默认 50,且必须 ≤-n)-q:每个 worker 的 QPS 限速-z:持续时长,如-z 30s;指定后忽略-n
经验法则:先按业务峰值预估 QPS,再换算并发数 ≈ 目标QPS × 平均响应时间。如果只想"稳定跑 30 秒",用-z 30s最省心。参数校验逻辑(如-n不能小于-c)见 hey.go。
4. 配置请求细节:方法、请求头与鉴权
真实接口往往带自定义请求头、请求体或 Basic Auth。常用参数:
| 参数 | 作用 |
|---|---|
-m | 指定 HTTP 方法(POST/PUT/DELETE 等) |
-H | 自定义请求头,可重复使用 |
-d/-D | 内联请求体 / 从文件读取请求体 |
-a | Basic 认证user:pass |
-t | 单请求超时秒数(默认 20,0为无限) |
-h2 | 启用 HTTP/2 |
⚠️ 压写接口(POST/DELETE)前务必确认目标是测试环境,并准备好回滚方案。
5. 正式压测:执行与监控
执行压测命令后,hey 会实时占用并发资源发起请求。测试期间建议在服务端同步观察:CPU、内存、连接池、错误率。测试中可随时Ctrl+C中断——hey 注册了信号处理,收到中断后会停止请求并输出已收集的数据(见 hey.go)。
6. 解读报告:关注这 4 组数字
hey 的汇总报告由 requester/report.go 与 requester/print.go 生成,包含:
- Requests/sec:实际吞吐,对照目标 QPS 是否达标
- 响应时间直方图:一眼看出延迟是否集中、有无长尾
- 延迟分布:P10 / P25 / P50 / P75 / P90 / P95 / P99,性能达标线通常卡在 P95
- 状态码分布:出现 5xx 说明服务已被压垮,需降低压力重试
此外还会分阶段拆解耗时(DNS 解析、建连、请求写出、首字节等待、响应读取),方便定位瓶颈在网络还是服务端。
7. 结果归档:导出 CSV 原始数据
汇总报告适合人看,回归对比更适合存原始数据。加上-o csv参数,hey 会把每个请求的 8 列指标(响应时间、DNS、建连、写出、等待、读取、状态码、时间偏移)逐条导出,列定义说明见 requester/print.go。
建议的归档命名规范:
hey_<接口名>_<日期>_<并发>-c_<总请求数>-n.csv将 CSV 与对应的命令、目标 URL、环境信息一起存档,后续版本回归时即可直接对比 P95 是否劣化。
8. 检查表:压测执行核对清单
把以下检查表复制到你的压测文档中,逐项打勾:
| # | 检查项 | 状态 |
|---|---|---|
| 1 | 压测机已安装 hey 且版本确认 | ☐ |
| 2 | 默认参数小流量验证通过,状态码全 200 | ☐ |
| 3 | -n/-c/-q/-z参数已按业务峰值设定 | ☐ |
| 4 | 请求方法、请求头、认证、超时配置正确 | ☐ |
| 5 | 目标为测试环境,写接口已有回滚预案 | ☐ |
| 6 | 压测期间同步监控服务端 CPU / 内存 / 错误率 | ☐ |
| 7 | 汇总报告已解读:吞吐、P95、状态码分布 | ☐ |
| 8 | CSV 原始数据已导出并按规范命名归档 | ☐ |
常见坑与快速自查
-n小于-c会直接报错退出:请求总数必须 ≥ 并发数。- P95 与平均值差距大:直方图出现右侧长尾时,看"慢请求"对应的是哪个阶段(DNS?建连?服务端?)。
- 结果忽高忽低:优先怀疑压测机网络抖动或 CPU 核心不足,用
-cpus固定核心数复测。
小结
用8 个步骤走一遍:装工具 → 打基线 → 定参数 → 配请求 → 跑压测 → 读报告 → 导 CSV → 归档核对,即可得到一次可复现、可对比、可归档的完整 hey 压测。hey 的价值正在于把 ApacheBench 级别的压测能力,压缩成了一条命令。
【免费下载链接】heyHTTP load generator, ApacheBench (ab) replacement项目地址: https://gitcode.com/GitHub_Trending/he/hey
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考