你是否在苦恼于想对一些系统做压力测试,但是又没有找到简单方便的工具?其实在 apache 里 面就自带了一些这样的测试工具—ab(apache benchmark)。此工具在安装在apache 的 bin 目录下面。Ab 可以直接在 web 服务器本地发起测试,也可以在远程发起测试。
Ab 测试的本质是模http请求,所以可以将它看做是对于Web 服务器软件的黑盒性能测试, 它获得的一切数据和计算结果,都可以途过HTTP来解释。
启动测试
如现在我们要对 www.qq.com 做一次测试,使用方法如下。在 windows 下面打开命令行,进入到 apache 的 bin 目录下面,或者将 apache 的 bin 目录添加到系统的环境发量的 path 下面。
输入 ab –n 100 –c 10 http://www.qq.com/
然后按回车,可以出现如下的内容:
ab-test-result
此命令解释:
-n 100
表示总请求数为 100
-c 10
表示并发用户数为 10Http://www.qq.com/
表示请求的目标 URL,也就是要测试的目标地址。
结果详解
Server Software 表示被测试的 Web 服务器软件名称,返回的 squid/3.0,它来自于http响应数据的头信息,所 以如果这里是我们自己编写的 Web 服务器软件或者修改开源的 web 服务器软件的源代码,返里的 信息可以为我们自定义的头信息。
Server hostname 表示请求的 URL 中的主机部分名称,它来自于http请求数据的头信息。
Total transferred 表示所有请求的响应数据长度总和,包括每个 http 响应数据的头信息和正文数据的长度。注意 这里不包括 http 请求数据的长度,所以 Total transferred 代表了仅 Web 服务器流向用户 PC 的应用层数据总长度。通过使用 ab 的-v 参数即可查看详细的 http 头信息。
HTML transferred 表示所有请求的响应数据中正文数据的总和,也就是减去了 Total transferred中 http 响应数据中头信息的长度。
Request per second 这里的值就是吞吐率,它等于
Complete request /Time taken for testsTime per request 这里的值是用户平均请求等待时间,它等于 Time taken for tests /(complete requests/Concurrency level)
Time per request(across all concurrent requests) 这里的值是服务器的平均请求处理时间,它等于 Time taken for tests/complete requests 返回值正是吞吐率的倒数。同时,它也等于 Time per request/Concurrency Level
Transfer rate 表示这些请求在单位时间内从服务器获取数据的长度,它等于 Total transferred /Time taken for tests 这个统计项可以很好的说明服务器在处理能力达到极限时,其出口带宽的需求量。
Percentage of the requests served within a certain time(ms) 这部分数据用于描述每个请求处理时间的分布情总,比如在上面的测试结果中,50%的请求处理 时间在 5200ms 内,99%的请求在 18022ms 内。注意这里的处理时间,是指前面的 Time per request, 即对于单个用户而言,平均每个请求处理的时间。