ab使用文档
Apache Bench (ab) 使用文档
ApacheBench:Apache 自带的高性能 HTTP 压力测试工具
目录
1. 简介
| 属性 | 说明 |
|---|---|
| 工具名 | ab (ApacheBench) |
| 所属包 | apache2-utils |
| 版本 | 2.3(本机) |
| 支持协议 | HTTP / HTTPS |
| 缺省端口 | 80(HTTP)/ 443(HTTPS) |
| 适用场景 | 快速 API 压测、Web 服务性能摸底 |
⚠️ ab 仅适合简单压测,不支持 POST body、Cookie、复杂鉴权等高级场景。
复杂压测建议用 Apache JMeter 或 wrk。
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
4.5 添加 Cookie
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
