ab 是什么
一个命令就能跑出每秒请求数与延迟分布,这让压测的启动成本降到最低。它的输出里最该关注三项:每秒请求数代表吞吐能力、失败请求数代表正确性、平均耗时代表响应速度。读平均耗时最容易出错——并发场景下有一行是跨所有并发请求的口径,那才是单个请求的耗时。另外它自身是单线程实现,压测机有可能先成为瓶颈。
基本信息
| 适用平台 | Linux、macOS(随 HTTP 服务器工具包提供) |
|---|---|
| 语法 | ab -n 总请求数 -c 并发数 地址 |
| 常用选项 | -k 长连接、-p POST 数据文件、-T 内容类型、-H 自定义请求头 |
| 关键输出 | 每秒请求数、失败请求数、单请求耗时 |
| 局限 | 压测客户端为单线程,协议特性支持有限 |
| 前提 | 只对自有或已获授权的环境压测 |
典型使用场景
- 验证接口容量:单机并发能支持到什么程度。
- 对比调优前后同一接口的吞吐变化。
- 上线前做基本容量评估,为限流与扩容提供依据。
- 排查接口在高并发下的失败率与超时。
- 验证开启长连接是否带来吞吐提升。
常用写法
常用写法
ab -n 1000 -c 50 http://127.0.0.1/health # 基础压测
ab -n 2000 -c 100 -k http://10.0.0.5/api/list # 开启长连接
ab -n 100 -c 10 -p body.json -T application/json http://10.0.0.5/api/login
ab -n 500 -c 20 -H 'Host: example.com' http://10.0.0.5/
top -b -n1 | head -5 # 确认压测机自身负载
ab -n 1000 -c 50 http://10.0.0.5/health | grep -E 'Requests per second|Failed requests|Time per request'输出逐项读法
| 输出项 | 含义 | 判断要点 |
|---|---|---|
| 每秒请求数 | 吞吐能力 | 核心指标,越大越好 |
| 失败请求数 | 响应异常的数量 | 非零必须排查,不能只看吞吐 |
| 单请求耗时 | 跨所有并发请求的口径 | 看清是哪一行,避免读错 |
| 连接各阶段耗时 | 网络与处理阶段拆分 | 定位是网络还是服务端慢 |
| 并发数 | 同时发起的请求数 | 与服务端连接数与队列能力相关 |
| 压测机负载 | 客户端自身开销 | 客户端先满则数据无效 |
读平均耗时要看清是哪一行:并发场景下有一行是跨所有并发请求的均值,那才是单请求耗时;另一行是并发批次的耗时,很容易读错。
压测客户端是单线程实现:并发拉得很高时瓶颈可能先出现在压测机上,先确认压测机的 CPU 与连接数是否吃满再下结论。
只对自己拥有或获得授权的环境压测;对生产环境压测要事先约定时间窗口并通知相关方,避免影响真实用户。