Web压测工具-ApacheBench(ab)

Apache Bench(ab)是一个对HTTP Web服务器(基于HTTP/HTTPS协议)进行负载测试和基准测试的开源免费、跨平台单线程命令行工具。

如果此前你已经安装了 Apache Web Server,那么 ab 工具应该也是一起自动安装了的。当然ab也可以单独作为Apache实用工具单独安装。

注意:

  1. ab的负载测试类似于DOS攻击,没有指令可以在运行测试时按特定间隔增加/减少并发性(即:不能梯度加压测试或梯度减压测试-JMeter可以实现加压测试,但使用上没有ab简单)
  2. 不论将 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 -Vab -h 验证安装是否成功!

ab-verify-apache-bench-installation.png

使用说明

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

ab-multiple-requests-testing.png

参数

请求设置

参数 作用
-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 HeadersServer的值,因此该值不一定有或正确
  • 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 - 完整请求耗时

推荐阅读:

转载请声明出处: MinsonLee的博客:https://minsonlee.github.io

扫描下方二维码,关注公众号,接收更多实时内容

新猿呓码

打赏一个呗

取消

感谢客官打赏,您的打赏使我动力十足!

扫码支持
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦