Hey HTTP 基准测试工具教程
Hey(原名 Boom)是一款轻量级的 HTTP 负载生成工具,用 Go 语言编写,单一二进制文件即可运行,无需任何依赖。它是 ApacheBench(ab)的现代替代品,支持 HTTP/2,使用简单且输出信息丰富。在搬瓦工 VPS 上使用 Hey 可以快速对 Web 服务进行基准测试,评估服务器的响应能力和承载上限。
一、安装 Hey
1.1 使用 Go 安装
# 如果已安装 Go 环境
go install github.com/rakyll/hey@latest
1.2 下载预编译二进制文件
apt update && apt upgrade -y
wget https://hey-release.s3.us-east-2.amazonaws.com/hey_linux_amd64 -O /usr/local/bin/hey
chmod +x /usr/local/bin/hey
hey --help
二、基础用法
2.1 默认测试
# 默认发送 200 个请求,50 个并发
hey https://your-target-site.com
2.2 自定义请求数和并发数
# 发送 1000 个请求,100 个并发
hey -n 1000 -c 100 https://your-target-site.com
2.3 持续时间测试
# 以 50 个并发运行 30 秒
hey -z 30s -c 50 https://your-target-site.com
2.4 控制请求速率
# 每秒最多 100 个请求
hey -q 100 -z 60s -c 10 https://your-target-site.com
三、常用参数详解
-n:总请求数(默认 200)。-c:并发数(默认 50)。-z:测试持续时间,如10s、1m、5m。-q:每个 worker 每秒的请求速率(QPS 限制)。-m:HTTP 方法,默认 GET。-H:自定义请求头。-d:请求体数据。-D:从文件读取请求体。-T:Content-Type,默认text/html。-t:每个请求的超时时间(秒),默认 20。-o:输出格式,支持 csv。-h2:启用 HTTP/2。
四、测试场景示例
4.1 GET 请求带自定义头
hey -n 500 -c 50 \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Accept: application/json" \
https://your-target-site.com/api/data
4.2 POST 请求
hey -n 500 -c 50 \
-m POST \
-T "application/json" \
-d '{"username":"test","action":"login"}' \
https://your-target-site.com/api/login
4.3 从文件读取请求体
cat > payload.json <<'EOF'
{
"title": "Performance Test",
"content": "Testing server capacity under load",
"tags": ["test", "benchmark"]
}
EOF
hey -n 500 -c 50 \
-m POST \
-T "application/json" \
-D payload.json \
https://your-target-site.com/api/posts
4.4 PUT 请求
hey -n 200 -c 20 \
-m PUT \
-T "application/json" \
-d '{"status":"active"}' \
https://your-target-site.com/api/users/1
4.5 HTTP/2 测试
hey -n 1000 -c 100 -h2 https://your-target-site.com
五、结果解读
Hey 的输出包含以下关键信息:
- Summary:总请求数、总耗时、RPS(每秒请求数)和平均数据传输大小。
- Response time histogram:响应时间直方图,展示请求的分布情况。
- Latency distribution:延迟分布的各百分位数(P10、P25、P50、P75、P90、P95、P99)。
- Details:DNS 解析、TCP 连接、TLS 握手、服务器处理和数据传输各阶段的平均耗时。
- Status code distribution:HTTP 状态码分布。
重点关注 P99 延迟和错误率,这两个指标能反映服务在高负载下的真实表现。
六、输出 CSV 格式
hey -n 1000 -c 50 -o csv https://your-target-site.com > results.csv
CSV 文件包含每个请求的详细信息,包括响应时间、状态码、数据大小等,可以导入 Excel 或其他工具进行进一步分析。
七、编写基准测试脚本
创建 benchmark.sh 进行阶梯式测试:
#!/bin/bash
TARGET="https://your-target-site.com"
echo "=== Hey 基准测试 ==="
echo "目标: $TARGET"
echo ""
for CONCURRENCY in 10 50 100 200 500; do
echo "--- 并发数: $CONCURRENCY ---"
hey -z 30s -c $CONCURRENCY $TARGET 2>&1 | grep -E "(Requests/sec|Average|Fastest|Slowest|Status code)"
echo ""
sleep 5
done
echo "=== 测试完成 ==="
chmod +x benchmark.sh
./benchmark.sh
八、与其他工具对比
- Hey vs ab:Hey 支持 HTTP/2,输出更丰富,使用 Go 编写性能更好。
- Hey vs Vegeta:Vegeta 支持恒定速率模式和管道化操作,更适合精确控制 RPS 的场景。
- Hey vs wrk:wrk 支持 Lua 脚本,可以定义复杂的测试逻辑。Hey 则更简单直接。
Hey 最大的优势是零配置即可使用,适合快速的基准测试和性能验证场景。
九、常见问题
连接被拒绝
目标服务器可能对并发连接数有限制,降低 -c 参数值即可。
文件描述符不足
ulimit -n 65535
总结
Hey 是一款简洁高效的 HTTP 基准测试工具,无需复杂配置即可快速评估 Web 服务的性能。它非常适合日常的性能验证和快速压测场景。在搬瓦工 VPS 上只需下载一个二进制文件即可使用。选购搬瓦工 VPS 请参考 全部方案,购买时使用优惠码 NODESEEK2026 可享受 6.77% 折扣。更多压测工具请参考 ApacheBench 教程 和 Vegeta 教程。