ApacheBench 压力测试教程
ApacheBench(简称 ab)是 Apache HTTP Server 自带的 HTTP 性能测试工具,也是使用最广泛的 Web 服务器基准测试工具之一。它操作简单、结果直观,非常适合快速评估 Web 服务器在并发请求下的性能表现。虽然功能不如 Locust 或 Artillery 丰富,但 ab 的零学习成本使其成为运维人员的常备工具。
一、安装 ApacheBench
1.1 Ubuntu/Debian 安装
apt update
apt install apache2-utils -y
1.2 CentOS 安装
yum install httpd-tools -y
验证安装:
ab -V
二、基础用法
2.1 简单 GET 测试
# 总共 1000 个请求,100 个并发
ab -n 1000 -c 100 https://your-target-site.com/
注意:URL 末尾必须带斜杠 /,否则 ab 可能报错。
2.2 常用参数说明
-n:总请求数。-c:并发请求数。-t:测试持续时间(秒),与-n互斥。-k:启用 HTTP Keep-Alive。-H:自定义请求头。-p:POST 数据文件。-T:Content-Type。-s:超时时间(秒),默认 30。-v:详细输出级别(1-4)。-e:输出 CSV 格式的百分位数据。-g:输出 gnuplot 格式的数据。
三、测试场景
3.1 Keep-Alive 测试
# 启用 Keep-Alive,减少 TCP 连接开销
ab -n 5000 -c 200 -k https://your-target-site.com/
3.2 持续时间测试
# 以 50 并发运行 60 秒
ab -t 60 -c 50 https://your-target-site.com/
3.3 POST 请求测试
# 创建 POST 数据文件
cat > post_data.json <<'EOF'
{"username":"testuser","password":"testpass"}
EOF
# 发送 POST 请求
ab -n 1000 -c 50 -p post_data.json -T "application/json" https://your-target-site.com/api/login
3.4 带自定义头的请求
ab -n 1000 -c 50 \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Accept: application/json" \
https://your-target-site.com/api/data/
3.5 HTTPS 测试
# 测试 HTTPS 站点(ab 原生支持 SSL)
ab -n 1000 -c 50 -k https://your-target-site.com/
四、结果解读
ab 输出的关键指标包括:
- Requests per second:每秒完成的请求数(RPS/QPS),衡量服务器吞吐量。
- Time per request:平均每个请求的响应时间(毫秒)。有两行,第一行是用户感知的时间(含排队),第二行是实际处理时间。
- Transfer rate:数据传输速率(KB/秒)。
- Connection Times:包含连接(Connect)、处理(Processing)和等待(Waiting)各阶段的最小值、平均值和最大值。
- Percentage of the requests served within a certain time:各百分位的请求响应时间,P50、P95、P99 最为重要。
- Failed requests:失败请求数,如果不为 0 需要关注失败原因。
五、导出结果数据
5.1 导出 CSV 百分位数据
ab -n 1000 -c 50 -e results.csv https://your-target-site.com/
生成的 CSV 文件包含每个百分位对应的响应时间,适合在电子表格中绘制图表。
5.2 导出 gnuplot 数据
ab -n 1000 -c 50 -g results.tsv https://your-target-site.com/
TSV 文件包含每个请求的详细时间数据,可用 gnuplot 生成图表。
六、阶梯式压测脚本
创建 ab-benchmark.sh 脚本进行渐进式压测:
#!/bin/bash
TARGET="https://your-target-site.com/"
REQUESTS=2000
echo "=== ApacheBench 阶梯压测 ==="
echo "目标: $TARGET"
echo "每轮请求数: $REQUESTS"
echo ""
for CONCURRENCY in 10 50 100 200 500; do
echo "--- 并发: $CONCURRENCY ---"
ab -n $REQUESTS -c $CONCURRENCY -k $TARGET 2>/dev/null | \
grep -E "(Requests per second|Time per request|Failed requests|Transfer rate)"
echo ""
sleep 3
done
echo "=== 测试完成 ==="
chmod +x ab-benchmark.sh
./ab-benchmark.sh
七、注意事项
- 单线程限制:ab 是单线程工具,在高并发测试时自身可能成为瓶颈。如需更高并发,建议使用 Hey 或 Vegeta。
- 不支持 HTTP/2:ab 仅支持 HTTP/1.1,无法测试 HTTP/2 性能。
- 单一 URL:每次只能测试一个 URL,无法模拟复杂的用户行为。
- 测试前清缓存:如果目标站点有缓存机制,首次请求和后续请求的性能可能差异很大。
- 避免自测:不要在被测服务器上对本机服务进行压测,测试客户端和服务端应该分开。
八、常见问题
apr_socket_recv 错误
通常是目标服务器主动断开连接导致的,降低并发数或增加超时时间:
ab -n 1000 -c 20 -s 60 https://your-target-site.com/
SSL 连接错误
确保系统 CA 证书是最新的:
apt install ca-certificates -y
update-ca-certificates
Too many open files
ulimit -n 65535
总结
ApacheBench 虽然功能相对简单,但其零配置、即装即用的特点使其成为快速性能验证的首选工具。在搬瓦工 VPS 上一行命令即可安装使用。对于更复杂的测试需求,建议结合 Locust 或 Artillery 使用。选购搬瓦工 VPS 请参考 全部方案,购买时使用优惠码 NODESEEK2026 可享受 6.77% 折扣。