Apache Bench(ab)是一个对HTTP Web服务器(基于HTTP/HTTPS协议)进行负载测试和基准测试的开源免费、跨平台的单线程命令行工具。
如果此前你已经安装了 Apache Web Server,那么 ab 工具应该也是一起自动安装了的。当然ab也可以单独作为Apache实用工具单独安装。
注意:
- ab的负载测试类似于- DOS攻击,没有指令可以在运行测试时按特定间隔增加/减少并发性(即:不能梯度加压测试或梯度减压测试-JMeter可以实现加压测试,但使用上没有- ab简单)
- 不论将 ab的并发数设置到多大,ab始终是通过单线程的方式来执行的,因此:当需要进行量级非常大的高并发测试时,ab本身单线程的处理能力却成了瓶颈从而导致并发测试结果不准确(一下子发起的请求或请求返回来的结果太多,ab自身处理不过来)!
原句:Apache Bench uses only one operating system thread irrespective of the concurrency level (specified by the -c flag). Therefore, when benchmarking high-capacity servers, a single instance of Apache Bench can itself be a bottleneck. To completely saturate the target URL, it is better to use additional instances of Apache Bench in parallel, if your server has multiple processor cores.
因此:ab 更适合单一URL的非精准压力测试!
安装
# Ubuntu/Debian
apt-get install apache2-utils
# RHEL/CentOS/Fedora
yum -y install httpd-tools
安装完毕之后,可以使用 ab -V 或 ab -h 验证安装是否成功!

使用说明
ab 的功能定位都很简单,用法:ab [options] [http[s]://]hostname[:port]/path。

参数
请求设置
| 参数 | 作用 | 
|---|---|
| -X | 设置代理信息 | 
| -P | 设置代理网络认证 | 
| -A | 添加基本网络请求认证 | 
| -E | 指定客户端私钥证书 | 
| -B <address> | 绑定出口 IP地址 | 
| -H | 设置额外请求头信息,如:’Accept-Encoding: gzip’ (该参数可重复添加多个值) | 
| -C <key=value> | 为请求头附加 Cookie信息(该参数可重复添加多个值) | 
| -n | 发起的请求次数 | 
| -c | 并发请求数(!!!注意:并发数设置不能大于请求总数) | 
| -t | 设置整个测试过程的时间限制-默认没有限制 | 
| -s | 设置测试过程中每一个请求的等待时间-默认为 30 秒 | 
| -b | 设置 TCP发送/接收缓冲区的大小,单位-字节 | 
| -T | 为 POST/PUT请求设置Header中的Content-type。如:'application/x-www-form-urlencoded'-默认'text/plain' | 
| -k | 使用 HTTP KeepAlive持久连接功能 | 
| -i | 使用 HEAD而不是GET请求方式 | 
| -m | 设置 HTTP请求方法 | 
| -p | POST请求的文件数据(记得设置-T参数) | 
| -u | PUT请求的文件数据 (记得设置-T参数) | 
打印结果
| 参数 | 作用 | 
|---|---|
| -v | 设置输出信息的详细程度(1-打印测试结果;2-在上一个等级基础上额外增加打印请求头+打印警告信息;3-在上一个等级基础上额外增加打印响应头;) | 
| -w | 用 HTML table方式将结果打印在stdout(通过管道重定向到文件便于查看、邮件) | 
| -x | 当使用 -w参数输出时,在<table>标签的属性输出 | 
| -y | 当使用 -w参数输出时,在<tr>标签的属性输出 | 
| -z | 当使用 -w参数输出时,在<td>、<th>标签的属性输出 | 
| -d | 不要显示请求百分比-毫秒时刻表 | 
| -S | 不要打印结果 warning级别信息 | 
| -q | 当执行超过150个请求时,不显示进度 | 
| -l | 接受可变的文档长度(用于动态页面) | 
| -g | 将请求统计数据输出到文件(颇为鸡肋) | 
| -e | 将请求进度-百分比数据输出到文件(颇为鸡肋) | 
| -r | 不要在socket接收错误时退出 | 
结果分析
服务器信息
- Server Software - Web服务器的名称,对应HTTP Respone Headers中Server的值,因此该值不一定有或正确
- Server Hostname - 服务器主机名
- Server Port - 服务器端口(80-http;443-https)
- SSL/TLS Protocol - 客户端和服务器之间协商的协议参数(只有使用了SSL才会有值)
- Server Temp Key - 服务器临时密钥信息(不一定有该结果)
- TLS Server Name - 公钥服务器名称
传输信息
- Document Path - 测试的页面路径
- Document Length - 页面大小
(重点)压测结果
- Concurrency Level - 并发数(同一时间发起的)
- Time taken for tests - 整个测试过程的耗时
- Complete requests - 成功的请求数
- Failed requests - 失败的请求数
- Total transferred - 整个测试过程网络传输量(单位:字节)
- HTML transferred - 整个测试过程HTML传输量(单位:字节)
- Requests per second - 吞吐率(RPS-单位:reqs/s) = 成功总请求数(Complete requests) / 测试过程耗时(Time taken for tests)
- Time per request - 用户平均请求等待时间 = 总时间(Time taken for tests) / (总请求数-Complete requests/ 并发用户数-Concurrent Level)
- Time per request(across all concurrent requests) - 服务器平均等待时间 = 总时间-Time taken for tests/ 成功总请求数-Complete requests
- Transfer rate - 平均网络传输流量(可以帮助排除是否存在网络流量过大导致响应时间延长的问题)
网络连接耗时-毫秒
格式:最小值、平均值、中位数、最大值
- Connect - TCP连接耗时
- Processing - 服务端处理耗时
- Waiting - 等待耗时
- Total - 完整请求耗时
推荐阅读:

 
 
        
         
       
                
 
                 
                
