Apache Banchmark(ab)工具是最著名的基准测试工具之一,它是默认安装的apache的一部分,能够通过模拟对特定的URL的任意数量请求来对web服务器进行负载测试。而且更重要的是Apache Banchmark是独立于Apache Web服务的,从而可以在运行ab的同时使运行此工具的计算机上的Web服务处于非活动状态。
Apache Banchmark应用
响应信息
通过Apache Banchmark工具测试可以获得以下信息:
传输数据总数量的大小(以字节为单位)
Web服务器在模拟流量下每秒可以支持的请求总数
完成一个请求所花费的最长时间(以毫秒为单位)
完成一个请求所花费的最短时间(以毫秒为单位)
负载模拟
同时还可以运行多种不同的负载模拟:
对web文档的模拟请求
指定时间内的请求
打开
Keep-Alive时的请求
安装
由于ab是apache自带的测试工具,所以这里只介绍在不同系统中安装apache的方法。
Windows安装
Windows用户可以在浏览器中访问http://httpd.apache.org/的左侧镜像链下载相应版本进行安装:

Unix安装
Unix或者linux操作系统会有很多安装apache的选项,可以通过ports、yum、apt-get命令行安装,当然也可以通过下载源文件进行安装。
运行
Windows运行
当apache安装成功后,我们会在其bin目录看到一个ab.exe文件,这个就是ab测试工具了,一般是在apache\apache2.2.22\bin目录下:
这时候直接双击ab是没有作用的,我们必须通过命令行去运行测试,由于我的是集成环境wamp server,所以我的目录是在D:\wamp\bin\apache\apache2.2.22\bin,切换到对应磁盘后执行ab命令提示以下帮助信息,则证明运行成功:

然后我们进行我们的第一次ab工具测试,我在本地上有个cynew的项目,所以我们就以这个来进行测试,老规矩,在命令行输入ab -n 100 -c 10 http://cynew.com/(这里的url末尾一定要加/哦),回车将会获得以下信息,我们将之分为四部分,将会在下文进行具体解析:

Unix运行
Unix下运行请参考上文中ab命令选项标记。
好了,以上是我们第一次使用Apache Banchmark工具,测试成功。
命令解析
选项标记
ab命令包含有大量可选标记。使用这些标记,可以为HTML表格格式化响应、设置COOKIE、设置基本身份验证信息以及设置内容类型,可选标记的完整列表如下:
-A<username>:<password>用于提供服务器身份验证信息。用户名和密码用:分隔。发送的字符串采用base64编码-c<concurrency number>一次模拟的请求数。默认情况下为1,。数量不能大于n值-nreuqests要执行的请求总数-e要创建的.csv文件的路径。该文件包含运行的基准测试的结果,该结果分为两列,即Percentage和Time in ms。建议采用"gnuplot"文件。-Ccookie-name=value可重复的标记,包含cookie信息-d隐藏“percentage served within XX[ms] table”-g要创建的“gnuplot”或TSV文件的路径。基准测试的输出将保存到该文件中-h显示要用于ab的选项列表-Hcustom-header采用字段值对形式发送有效标头和请求-k启用Keep-Alive功能。允许通过一个HTTP会话满足多个请求。默认情况下,该功能处于禁用状态-pPOST-file包含用户HTTP POST请求的数据的文件路径。内容包含由&分隔的键=值对-Pusername:password采用base64编码。同-A说明-q执行多于100个请求时隐藏进度输出-s使用https协议,而非默认的http协议——不建议这样做-S隐藏中位数和标准偏差值-ttimelimit指定了这个值以后,基准测试的时间不会超过指定的值。默认情况下无时间限制-vverbosity-level数值为2及以上将打印警告和信息;为3时打印HTTP响应代码;4及以上将打印标头信息-V显示ab工具的版本号-w采用HTML表格打印结果-x<table-attributes>表示HTML属性的字符串,使用-w时将设置在<table>的标记中-Xproxy:[:port]指定要使用的代理服务器。代理端口是可选的-y<tr-attributes>表示HTML属性的字符串,使用-w时将放置在<tr>标记中-z<td-attributes>标识HTML属性的字符串,使用-w时将放置在<td>标记中
参数解析
服务器信息

上图我们可以看到返回的三个参数,分别对应的apache版本、测试主机名、Web服务器侦听的端口号。
文档信息

两个参数:
Document Path请求的文档Document LengthHTML、图像、CSS、JS、以及响应中任何内容的字节数总和
连接信息

这一部分呢,则包含了信息的主体。譬如:请求收到响应的时长、返回的数据总量等,最重要的一点就是他告诉了我们在处理文档时Web服务器可以支持多少用户:

在ab返回的信息中,**HTML transferred**、**Requests per second**、以及Time per request都是关键字段。这些字段能使我们大概了解Web服务器为一个请求返回的数据量、Web服务器一秒可以处理的请求总数以及一个请求成功地接收到来自Web服务器的响应所花费的总时间。
在实际项目中,我们应该尽量降低HTML transferred和Time per request的数值,提高Requests per second的数值。
连接指标细目分类

这一部分包含一个表,这其中包含Connect、Processing、Waiting、Total字段,这些字段表示请求在每个过程状态中所需的时间。最需要注意的是Total字段的最大值和最小值,因为通过这两列我们可以知道一个请求所需花费的最长和最短时间的数据。
常见基准测试
并发测试
ab -n 100 -c 10 https://www.cxiansheng.cn/(不要跑我的网站,据我所知,超级慢,自黑.jpeg)这段命令模拟同时对Web服务器进行10个并发请求,直到进行到100个请求为止。时间测试 命令:
ab -c 10 -t 20 https://www.cxiansheng.cn/模拟10个并发请求在20秒时间内同时访问网站
注意事项
请求的
URL后面一定要以/收尾啊喂,当然前提是不是请求这个该网站中的特定项目如果使用了
t选项标记,如果不给他值得话,那么他的默认值是5000c标记的值应小于n的值,如果值等于n,则只会并发请求所有n个请求
总结
以上部分资料参考于《高性能PHP应用开发》这本书。全书从前端和后端的角度去分析整个Web项目,谈到了针对于前端和后端不同层面的测试工具和优化技巧,是一本不错的好书,推荐!