转载请注明出处:http://blog.csdn.net/dongdong9223/article/details/49248979
本文出自【我是干勾鱼的博客】
Apache Bench简称ab,是Apache附带的一个工具,可以用来测试网站性能。通过ab指定命令发送请求后,可以得到每秒传送字节数、每秒处理请求数、每请求处理时间等统计数据。
要使用ab,需要先下载Apache,从Apache首页进入下载页:
在下载页面中我们能看出,Apache目前最新的版本为2.4.17:
网上的教程大都是针对linux下ab的使用的,就不再赘述了。这里介绍一下Windows环境下ab的安装与使用。需要说明的一点,Apache官方只提供Apache的源码版,也就是source版,而不提供二进制版(Binaries)。一般来说各个平台下的Binaries版本都是一些社区或其它网站提供的,我们在Windows上使用ab,不可能拿着远吗再去用VS重新一遍吧,肯定直接用编译好的。所以在上图中选择Binaries,点进去,选择win32:
这里就能看到Windows平台下有关Apache的二进制版本的下载信息了。这里很明确的说明:
【
The Apache HTTP Server Project itself does not provide binary releases of software, only source code. Individual committers may provide binary packages as a convenience, but it is not a release deliverable.
If you cannot compile the Apache HTTP Server yourself, you can obtain a binary package from numerous binary distributions available on the Internet.
Popular options for deploying Apache httpd, and, optionally, PHP and MySQL, on Microsoft Windows, include:
】
想获取二进制版本,可以选择一个网站来下载,这里我们选择第一个:
打开Apache Haus的网站:
在“Apache 2.4 Server Binaries”部分,选择“Apache 2.4.17 x64”这一项右边的德国国旗(看来镜像在德国):
这时候下载会自动开始,下载下来后:
将其解压到一个盘符的根目录,比如C盘的根目录,或者D盘的根目录,例如解压到D盘,则为:
D:\Apache24
这很重要,一会儿会作出说明。
同时解压出来的还有一个html文件,这个文件一定要看看,里面对Apache的使用有哪些注意事项做出了说明,比较重要的有几点:
本机必须已安装“Visual C++ 2008 Redistributable Package”,如果没有安装,下载路径可以在刚才的下载页面找到。
Apache需要解压在任意一个盘符的根目录下,这就是所谓的“ServerRoot”,默认是配置在:{Apache24}\conf\httpd.conf这个文件中的。
准备好了之后,就可以运行bin目录下的httpd.exe文件,运行之后后台服务就启动起来了,任务管理器中可以看到两个进程:
这时候 在浏览器中输入:http://localhost/,如果能够看到Apache Haus的测试页面,就说明服务启动成功了。
这时候我们要使用Apache Bench的功能,在bin目录下,运行ab.exe就能够看到提示信息了:
这里一定要注意url中的path,也就是图中标红的地方,如果你要测试百度首页,那么url一定要写成:
http://www.baidu.com/path
而不是:
http://www.baidu.com
也就是一定要在需要测试的url末尾加一个path,否则测试时总会认为url非法。
例如有一个请求,请求命令为:
ab.exe -n 500 -c 50 http://ip:8081/path
注意这里的:
-n 500
是说本次测试请求总数为500,而:
-c 50
是说本次请求并发数为50。
测试结果的截图如下:
如图列出了“请求命令”、“测试结果主体”、“所测试数据返回时间的百分比”,其中,“测试结果主体”如下所示:
Concurrency Level: 50
Time taken for tests: 32.626 seconds
Complete requests: 500
Failed requests: 0
Non-2xx responses: 500
Total transferred: 564000 bytes
HTML transferred: 479500 bytes
Requests per second: 15.33 [#/sec] (mean)
Time per request: 3262.587 [ms] (mean)
Time per request: 65.252 [ms] (mean, across all concurrent requests)
Transfer rate: 16.88 [Kbytes/sec] received
并发量。
整个测试所用的时间。
完成的请求数。
失败的请求数。
如果接收到的HTTP响应数据的头信息中含有2XX以外的状态码,则会在测试结果中显示另一个名为“Non-2xx responses”的统计项,用于统计这部分请求数,这些请求并不算在失败的请求中。
表示所有请求的响应数据长度总和,包括每个HTTP响应数据的头信息和正文数据的长度。注意这里不包括HTTP请求数据的长度,仅仅为web服务器流向用户PC的应用层数据总长度。
表示所有请求的响应数据中正文数据的总和,也就是减去了Total transferred中HTTP响应数据中的头信息的长度。
吞吐率。要清楚吞吐率是与并发数相关的,即使请求总数相同,但如果并发数不一样,吞吐率还是很可能有很大差异的。
计算公式:Complete requests/Time taken for tests
用户平均请求等待时间。也就是一次并发(在本例中为50)总的时间。
计算公式:Time token for tests/(Complete requests/Concurrency Level)。
服务器平均请求等待时间。也就是一次请求(在本例中也就是500中的平均每一次)所需时间。
计算公式:Time taken for tests/Complete requests
正好是吞吐率的倒数。也可以这么统计:Time per request/Concurrency Level。
表示这些请求在单位时间内从服务器获取的数据长度。
计算公式:Total trnasferred/ Time taken for tests
这个统计很好的说明服务器的处理能力达到极限时,其出口宽带的需求量。
这部分数据用于描述每个请求处理时间的分布情况,比如以上测试,80%的请求处理时间都不超过6ms,这个处理时间是指前面的Time per request,即对于单个用户而言,平均每个请求的处理时间。