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 是单线程工具,在高并发测试时自身可能成为瓶颈。如需更高并发,建议使用 HeyVegeta
  • 不支持 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 上一行命令即可安装使用。对于更复杂的测试需求,建议结合 LocustArtillery 使用。选购搬瓦工 VPS 请参考 全部方案,购买时使用优惠码 NODESEEK2026 可享受 6.77% 折扣。

关于本站

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

新手必读
搬瓦工优惠码

NODESEEK2026(优惠 6.77%)

购买时填入即可抵扣。