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:测试持续时间,如 10s1m5m
  • -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 教程

关于本站

搬瓦工VPS中文网(bwgvps.com)是非官方中文信息站,整理搬瓦工的方案、优惠和教程。我们不销售主机,不提供技术服务。

新手必读
搬瓦工优惠码

NODESEEK2026(优惠 6.77%)

购买时填入即可抵扣。