ab使用文档

Apache Bench (ab) 使用文档

ApacheBench:Apache 自带的高性能 HTTP 压力测试工具


目录

  1. 简介
  2. 基本用法
  3. 常用参数
  4. 实际场景举例
  5. 输出结果说明
  6. 注意事项

1. 简介

属性 说明
工具名 ab (ApacheBench)
所属包 apache2-utils
版本 2.3(本机)
支持协议 HTTP / HTTPS
缺省端口 80(HTTP)/ 443(HTTPS)
适用场景 快速 API 压测、Web 服务性能摸底

⚠️ ab 仅适合简单压测,不支持 POST body、Cookie、复杂鉴权等高级场景。
复杂压测建议用 Apache JMeterwrk


2. 基本用法

ab [选项] [http[s]://]hostname[:port]/path

最简用法(默认:100 并发 × 1000 次请求):

ab http://example.com/test

等价于:

ab -n 1000 -c 100 http://example.com/test

3. 常用参数

核心参数

参数 说明
-n <count> 总请求次数(requests)
-c <concurrency> 并发数(concurrency)
-t <time> 测试时长上限(秒),与 -n 二选一
-T <content-type> 请求 Content-Type(如 application/json
-p <file> POST 数据文件(需配合 -m POST 使用)
-m <method> HTTP 方法(GET/POST/PUT/DELETE…)
-H <header> 自定义请求头(可多次使用)
-C <cookie> Cookie(格式 key=value
-A <user:pass> Basic 认证
-k 启用 HTTP Keep-Alive(长连接)
-s <seconds> 超时时间(秒)
-v <verbosity> 日志详细度(1–4,默认 0)
-o <file> 将结果输出到 CSV 文件
-e <file> 将每请求耗时输出到 CSV 文件

高级参数

参数 说明
-l 允许不合法的响应长度(不发警告)
-i 使用 HEAD 方法代替 GET
-q 不显示 100xx 进度条
-x <attrs> 属性和值(代理用 proxy:port
-X <host:port> 指定代理服务器
-g <file> 将数据存入 gnuplot 文件
-y <col> 跟踪表格列

4. 实际场景举例

4.1 基础 GET 压测

ab -n 1000 -c 100 http://localhost:8080/api/list

→ 100 并发,共发 1000 次 GET 请求


4.2 HTTPS 压测

ab -n 500 -c 50 https://example.com/api/test

4.3 添加 Header(如 Bearer Token)

ab -n 5000 -c 200 -H "Authorization: Bearer YOUR_TOKEN_HERE" -H "Content-Type: application/json" https://example.com/api/test

4.4 POST 请求 + JSON Body

先写一个 JSON 文件:

# 写入请求体
echo '{"user":"admin","pwd":"123456"}' > /tmp/post_data.json

# 执行 POST 压测
ab -n 500 -c 50 -p /tmp/post_data.json -T application/json -m POST http://localhost:8080/api/login

ab -n 1000 -c 100 -C "session_id=abc123; token=xyz789" http://example.com/api/profile

4.6 Basic 认证

ab -n 500 -c 50 -A admin:password123 https://example.com/api/secure

4.7 高性能压测(固定并发 × 1 分钟)

ab -t 60 -c 200 -k http://localhost:8080/api/heavy

→ 每秒维持 200 并发,最长运行 60 秒


4.8 输出 CSV

ab -n 5000 -c 100 -o result.csv http://example.com/api/test

打开终端快速预览:

cat result.csv

5. 输出结果说明

Server Software:        nginx/1.25.3        ← 服务器信息
Server Hostname:        example.com          ← 被测域名
Server Port:            80                   ← 端口
SSL/TLS Protocol:       TLSv1.3              ← 加密协议(HTTPS 时)

Document Path:          /api/test            ← 请求路径
Document Length:        1245 bytes           ← 响应大小

Concurrency Level:      100                  ← 并发数
Time taken for tests:   5.230 seconds        ← 总耗时
Complete requests:      5000                  ← 完成请求数
Failed requests:        0                    ← 失败请求数
Total transferred:      6380000 bytes        ← 总传输字节数
HTML transferred:       6225000 bytes        ← 返回内容字节数

Requests per second:    956.58 [#/sec]       ← 平均 QPS(核心指标!)
Time per request:       104.599 [ms]          ← 每个请求平均耗时
Time per request:       1.046 [ms]            ← 并发分摊后每个请求耗时
Transfer rate:          1193.35 [Kbytes/sec]  ← 传输速率

Percentage of the
  requests served within:
    50 ms:    12%    ← P50(半数请求在 50ms 内完成)
    75 ms:    35%
    95 ms:    78%
    98 ms:    91%
    99 ms:    97%
    100 ms:   100%

关键指标速查

指标 含义 参考标准
QPS 每秒完成请求数 越高越好
Time per request (第一个) 单个请求完整耗时 越低越好
Failed requests 失败请求数 应为 0
P95/P99 95%/99% 请求耗时 越低越好
Transfer rate 吞吐量 越高越好

6. 注意事项

⚠️ 注意点 说明
只支持 HTTP/HTTPS 不支持 WebSocket、gRPC 等协议
并发非线程 -c 参数不代表线程数,是同时发出的请求数
压测本机服务慎用 压测本机会占用 CPU/带宽,自测结果偏高
大型响应慎用 并发较高时响应体越大,总耗时越不准
不适合压复杂场景 Cookie 鉴权、Session 保持、复杂请求体 → 请用 JMeter / k6
无 HTTPS 证书验证 ab 不带 SSL 证书验证,MITM 场景下会信任所有证书
结果仅供参考 不同版本、不同操作系统结果可能有偏差

快速参考卡

# 最简
ab http://localhost:8080/test

# 指定并发+次数
ab -n 5000 -c 100 http://localhost:8080/test

# 高并发长时间
ab -t 60 -c 200 -k http://localhost:8080/test

# 带 Auth Header
ab -n 1000 -c 50 -H "Authorization: Bearer TOKEN" https://example.com/api

# POST JSON
ab -n 500 -c 50 -p /tmp/data.json -T application/json -m POST http://localhost:8080/api

# 导出 CSV
ab -n 5000 -c 100 -o result.csv http://localhost:8080/test

# 仅显示进度条(不打印每请求信息)
ab -q -n 5000 -c 100 http://localhost:8080/test