首页/系统/Linux 运维命令速查/ab 快速 HTTP 压测
网络命令82 条

ab 快速 HTTP 压测

ApacheBench 一条命令跑 QPS 与延迟分布:验证接口容量、对比调优前后效果的最低成本手段。

Linux 运维命令速查系统更新于 2026-10-13

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 与连接数是否吃满再下结论。
只对自己拥有或获得授权的环境压测;对生产环境压测要事先约定时间窗口并通知相关方,避免影响真实用户。

易错点

  • 只看吞吐不看失败请求数,服务已经大量报错但吞吐数字看起来很高。
  • 读错平均耗时的口径,把并发批次耗时当成单请求耗时,得出完全错误的性能结论。
  • 压测机自身成为瓶颈却怪服务端,结论与优化方向全部跑偏。
  • 对生产环境未经沟通就压测,影响真实用户并触发告警。

数据来源与参考

  • Apache HTTP Server 官方文档(ab 手册)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌