Apache Benchmark(ab)工具能够通过模拟对特定的url的任意数量请求对web服务器进行负载测试!
ab工具提供以下信息:
传输数据的总大小(以字节为单位)
web服务器在模拟流量下每秒可以支持的请求总数
完成一个请求需要花费的最长时间(毫秒为单位)
完成一个请求需要花费的最短时间(毫秒为单位)
使用ab工具还能可以运行很多不同的负载模拟:
对web文档的模拟请求
指定时间内的请求
打开 keep-alive时的请求(称持久连接、连接重用,Keep-Alive功能使客户端到服务器端的连接持续有效,当出现对服务器的后继请求时,Keep-Alive功能避免了建立或者重新建立连接。)
结果详解:
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking www.example.com (be patient).....done
<--服务器信息-->
Server Software: nginx/1.10.3 //web服务器运行的软件
Server Hostname: www.example.com //主机名
Server Port: 443 //服务器监听的端口
SSL/TLS Protocol: TLSv1/SSLv3,ECDHE-RSA-AES256-SHA384,4096,256 //协议
<--文档信息-->
Document Path: / //请求的文档路径
Document Length: 99050 bytes //响应内容的字节数总和(包含html,图片,css,js,任何内容)
<--连接信息-->
Concurrency Level: 1 //进行的并发请求总数
Time taken for tests: 0.089 seconds //运行花费的总时间(秒)
Complete requests: 1 //模拟的请求总数中已完成的请求总数
Failed requests: 0 //失败的请求总数
Write errors: 0 //使用写入数据中遇到的错误总数
Total transferred: 99397 bytes //整个模拟响应中传输的总数据,大小包括标头数据
HTML transferred: 99050 bytes //整个模拟传输的内容正文大小
Requests per second: 11.20 [#/sec] (mean) //每秒支持的请求总数
Time per request: 89.292 [ms] (mean) //满足一个请求需要花费的总时间
Time per request: 89.292 [ms] (mean, across all concurrent requests) //满足所有并发中的一个请求所需要花费的总时间
Transfer rate: 1087.08 [Kbytes/sec] received //每秒收到的字节总数
//这些字段告诉我们请求过程状态所需要的时间
Connection Times (ms)
min mean[+/-sd] median max
Connect: 19 19 0.0 19 19
Processing: 71 71 0.0 71 71
Waiting: 67 67 0.0 67 67
Total: 89 89 0.0 89 89
ab命令(标记)参数详解
-A <username>:<password> 用于提供服务器身份验证信息,用户名和密码用:分割.发送的字符串采用base64编码
-c <concurrency number> (并发数)一次模拟请求数,默认情况下设置为1.数值不能大于n的值
-C cookie-name=value 可重复的标记,包含cookie信息
-d 不显示百分表
-e 要创建的.csv文件的路径,这个文件包含的测试的结果,结果分为两列,百分比 和 毫秒,建议使用gnuplot命令行的交互式绘图工具
-g 要创建的gnuplot或者tsv文件的路径.输出将保存到该文件中
-h 显示ab标记的选项列表
-H custom-header 采用字段值对形式发送有效标记头和请求(自定义头信息)
-i 执行head请求,而不是默认的get请求
-k 启用keep-Alive功能,允许通过一个http会话满足多个请求,默认这个功能为禁用状态
-n requests 要执行的请求次数
-p POST-file 包含用于发送post请求的数据文件路径.内容应该包含由 & 分割的键=值对
-P username:password 身份认证的字符串,采用base64编码.
-q 执行多余100个请求时隐藏进度输出
-s 使用https协议
-S 不显示中位数和标准偏差值
-t timelimit 超时时间,默认时间无限制
-v verbosity-level 数值为2以上打印警告信息,为3输出http响应码,4以上输出标记头信息
-V 版本号
-w 采用表格打印结果
-x <table-attributes> 表示html属性的字符串,使用-w时将放置在<table>标记中
-X proxy[:port] 代理服务器端口
-y <tr-attributes> 表示html属性的字符串,使用-w时将放置在<tr>标记中
-z <td-attributes> 表示html属性的字符串,使用-w时将放置在<td>标记中
注意事项:
如果你不请求该域名中的特定文档,那域名最后边的反斜杠是必要的
如果被某些web服务器阻止,可能收不到任何数据,可以使用-H,来提供请求中的标识头信息
ab -n 100 -c 5 -H "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.59 Safari/537.36" http://www.example.com