1. ab 是 Apache自带的压力测试工具。
ab 非常实用,它不仅可以对 Apache 服务器进行网站访问压力测试,也可以对或其它类型的服务器进行压力测试。比如 nginx、tomcat、IIS 等。
2. ab 原理
ab 命令会创建多个并发访问线程,模拟多个访问者同时对某一URL地址进行访问。它的测试目标是基于 url 的可以用来测试 Web 服务器的 负载压力。
3. 注意事项
ab 命令对 发出负载 的计算机要求很低,它既不会占用很高CPU,也不会占用很多内存。但却会给 目标服务器 造成巨大的负载,其原理类似CC攻击。自己测试使用也需要注意,否则一次太多的负载。可能造成 目标服务器 资源耗完,严重时甚至导致死机。
4. 参数说明
常用命令 ab -n10 -c10 http://xxx.xxx.com/
ab -h 查看命令详情
ab [options] [http://]hostname[:port]/path
参数名 | 参数值 | 描述 |
-n | requests | 测试会话中所执行的请求个数 |
-c | concurrency | 一次产生的请求个数 |
-t | timelimit | 测试所进行的最大秒数,默认时,没有时间限制 |
-p | attribute | POST 请求的数据的文件,添加基本代理身份验证,属性是冒号分隔的用户名和密码。 |
-t | content-type | POST 请求数据所使用的Content-type头信息 |
-v | verbosity | 显示信息的详细程度,-4或更大值会显示头信息,3或更大值可以显示响应代码(404,200等),2或更大值可以显示警告和其他信息 |
-V | 显示版本号并退出 | |
-w | 以HTML表的格式输出结果 | |
-i | 执行HEAD请求,而不是GET | |
-x | attributes | 设置<table>属性的字符串 |
-X | proxy:port | 请求使用代理服务器 |
-y | attributes | 设置<tr>属性的字符串 |
-z | attributes | 设置<td>属性的字符串 |
-C | attribute | 请求附加一个Cookie:行。name=value,此参数可以重复 |
-H | attribute | 请求附加额外的头信息,以冒号分隔的字段和值的对("Accept-Encoding:zip/zop;8bit") |
-A | attribute | 对服务器提供BASIC认证信任。用户名和密码由一个:隔开,并以base64编码形式发送。无论服务器是否需要(即,是否发送了401认证需求代码),此字符串都会被发送 |
-h | 显示使用方法 | |
-e | filename | 产生一个以逗号分隔的(CSV)文件,其中包含了处理每个相应百分比的请求所需要(从1%到100%)的相应百分比的(以微妙为单位)时间。由于这种格式已经“二进制化”,所以比'gnuplot'格式更有用。 |
-g | filename | 把所有测试结果写入一个'gnuplot'或者TSV(以Tab分隔的)文件。此文件可以方便地导入到Gnuplot,IDL,Mathematica,Igor甚至Excel中。其中的第一行为标题。 |
-k | 启用HTTP KeepAlive功能,即在一个HTTP会话中执行多个请求 | |
-q | 如果处理的请求数大于150,ab每处理大约10%或者100个请求时,会在stderr输出一个进度计数。此-q标记可以抑制这些信息 |
5. 响应数据说明
参数 | 示例 | 描述 |
Server Software | nginx | web服务器 |
Server Hostname | xxx.xxx.com | 域名 |
Server Port | 80 | 端口 |
Document Path | / | 请求路径 |
Document Length | 246 bytes | 请求数据大小 |
Concurrency Level | 10 | 并发用户数 |
Time taken for tests | 51.584 seconds | 整个测试持续的时间 |
Complete requests | 100 | 完成的请求数量 |
Failed requests | 0 | 失败的请求数量 |
Non-2xx responses | 100 | |
Total transferred | 92999 bytes | 整个场景中的网络传输量 |
HTML transferred | 24600 bytes | 整个场景中的HTML内容传输量 |
Requests per second | 1.94 [#/sec] (mean) | 每秒请求数(平均) |
Time per request | 5158.410 [ms] (mean) | 每次并发请求时间(所有并发) |
Time per request | 515.841 [ms] (mean, across all concurrent requests) | 并发的每个请求平均消耗时间 |
Transfer rate | 1.76 [Kbytes/sec] received | 平均每秒网络上的流量,可以帮助排除是否存在网络流量过大导致响应时间延长的问题 |
Connection Times (ms)
min | mean | [+/-sd] | median | max | |
Connect | 0 | 0 | 0.5 | 0 | 1 |
Processing | 1114 | 4861 | 814.2 | 4880 | 6147 |
Waiting | 1108 | 4858 | 814.4 | 4878 | 6145 |
Total | 1115 | 4862 | 814.2 | 4881 | 6147 |
Percentage of the requests served within a certain time (ms)
50% | 4881 |
66% | 5211 |
75% | 5370 |
80% | 5460 |
90% | 5590 |
95% | 5647 |
98% | 5737 |
99% | 6147 |
100% | 6147 (longest request) |