在项目开发完成,需要对系统整体做一个压测,以满足客户上线前的性能要求,什么打开页面不能超过2秒,复杂业务执行不能超过5秒等等。Jmeter工具大家都耳熟能详,今天就来介绍一个轻量级的压测工具Apache Bench,也是常常说的ab。记得n年前,有客户问到系统使用ab压测过了吗?当时还不知道ab这个简称指的是啥。
为什么需要压测
想象一下:你精心设计的API,以为能扛住千人并发,结果上线后秒变”慢动作回放”。这时候,你最需要的是什么?不是”可能”,不是”感觉”,也不是在我本地访问很快之类的话术,而是真实数据!ab工具就是那个能给你”真知灼见”的工具。它小巧玲珑,却能发挥巨大作用,主要用于评估Web服务器在不同负载情况下的性能表现(如服务器的响应时间、吞吐量等)。无论是开发新应用,还是优化现有网站,ab都能为你提供关键数据支持,帮你全面了解服务器的”抗压能力”。ab有以下优势:
- 简单到:无需复杂配置,一条命令搞定
- 精准:提供准确的响应时间、吞吐量数据
- 真实:模拟真实用户并发访问
- 免费:Apache官方出品,开箱即用
ab的安装
安装(超简单)
Linux (Debian/Ubuntu):
sudo apt-get install apache2-utils
Linux (CentOS/RHEL):
sudo yum install httpd-tools
macOS:
brew install httpd
Windows: 访问 Apache Lounge (
https://www.apachelounge.com/download/)下载对应版本,解压后将bin目录加入PATH
最简单的压测命令
ab -n 1000 -c 100 http://localhost:8080/api/test
- -n 1000:总共发送1000个请求
- -c 100:同时模拟100个用户并发
- http://localhost:8080/api/test:要测试的API地址
简单使用
我们通过天气公开的接口,测试一下,命令如下:
ab -n 1000 -c 100 http://t.weather.itboy.net/api/weather/city/101020100
1000个请求发送了,下面还生成了一些数据总结
上面的数据统计,就是压测报告,当你运行ab后,就会看到上面那样一份”成绩单”。
关键指标:
- Requests per second (RPS):每秒处理请求数,数字越大越好!54.92表明每秒处理54个请求
- Time per request:单个请求平均耗时(服务器视角),1820毫秒
- Time per request (mean,across all concurrent requests):用户实际感受到的等待时间,18毫秒(这才是你关心的!)
- Failed requests:失败请求数,0表明一切正常
进阶用法
模拟POST请求
ab -n 10 -c 2 -p req.txt -T 'application/json' http://localhost:8080/api/test
- -p req.txt:发送的请求体文件
- -T ‘application/json’:设置Content-Type
保持连接(模拟浏览器行为)
ab -n 1000 -c 100 -k http://localhost:8080/api/test
- -k:启用HTTP Keep-Alive,复用连接,大幅提升RPS
模拟登录状态
ab -n 1000 -c 100 -C "sessionid=12345" http://localhost:8080/api/test
- -C “sessionid=12345″:添加Cookie,模拟已登录用户
ab参数速查表
参数 |
说明 |
实用场景 |
-n |
总请求数 |
设定测试总量 |
-c |
并发数 |
模拟用户数 |
-k |
启用Keep-Alive |
模拟真实浏览器行为 |
-p |
POST数据文件 |
测试API接口 |
-T |
Content-Type |
设置请求头 |
-C |
Cookie |
模拟已登录状态 |
-v |
详细程度 |
1-4级,越高越详细 |
-w |
HTML格式输出 |
生成美观的报告 |
官方说明文档地址为
https://httpd.apache.org/docs/2.4/programs/ab.html
全部参数如下:
ab [ -A auth-username:password ] [ -b windowsize ] [ -B local-address ] [ -c concurrency ] [ -C cookie-name=value ] [ -d ] [ -e csv-file ] [ -E client-certificate file ] [ -f protocol ] [ -g gnuplot-file ] [ -h ] [ -H custom-header ] [ -i ] [ -k ] [ -l ] [ -m HTTP-method ] [ -n requests ] [ -p POST-file ] [ -P proxy-auth-username:password ] [ -q ] [ -r ] [ -s timeout ] [ -S ] [ -t timelimit ] [ -T content-type ] [ -u PUT-file ] [ -v verbosity] [ -V ] [ -w ] [ -x <table>-attributes ] [ -X proxy[:port] ] [ -y <tr>-attributes ] [ -z <td>-attributes ] [ -Z ciphersuite ] [http[s]://]hostname[:port]/path
- 最新
- 最热
只看作者