简介
ab全名是ApacheBench,是apache自带的一款模拟http请求的web服务器性能测试工具,安装apache的时候会默认帮我们装上。它非常容易使用,完全可以模拟各种条件下的各种请求。
一个简单的例子
我们使用ab工具写一个简单的例子,执行命令:ab -n 100 -c 10 http://www.baidu.com/。这个命令的意思是启动ab,然后向http://www.baidu.com/发送100个请求(-n 100),一共有10个并发用户(-c 10),命令执行结果如下(横杠后面是我加的解释):
This is ApacheBench, Version 2.0.40-dev <$Revision: 1.146 $> apache-2.0
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Copyright 2006 The Apache Software Foundation, http://www.apache.org/
Benchmarking www.baidu.com (be patient).....done
Server Software: BWS/1.0
Server Hostname: www.baidu.com
Server Port: 80
Document Path: /————————————————请求URL中的根绝对路径,通过它的后缀名我们一般可以了解该请求的类型
Document Length: 9726 bytes————————————————HTTP响应数据的正文长度
Concurrency Level: 10————————————————并行用户数,这是我们设置的参数
Time taken for tests: 0.753939 seconds————————————————表示所有这些请求被处理完成所花费的总时间
Complete requests: 100————————————————表示总请求数,这是我们设置的参数
Failed requests: 0————————————————表示失败的请求数,包括在连接服务器、发送数据、接受数据等环节发生异常以及无响应超时,超时时间可以通过ab的-t参数来设置。而如果接收到的HTTP响应数据的头信息中含有2xx以为的状态码,则会在测试结果显示另一个名为“Non-2xx responses”的统计项,用户统计这部分数据,这些请求不算失败的请求。
Write errors: 0
Total transferred: 1033995 bytes————————————————所有请求的响应数据总长度,包括每个HTTP响应数据的头信息和正文数据的长度。注意这里不包括HTTP请求数据的长度,所以它仅仅代表从web服务器流向用户PC的应用层数据总长度。
HTML transferred: 994200 bytes————————————————和Total transferred的区别在于去掉了响应数据中头信息的长度
Requests per second: 132.64 [#/sec] (mean)————————————————吞吐率,我们关注的指标,mean表示它是平均值
Time per request: 75.394 [ms] (mean)————————————————用户平均请求等待时间,mean表示它是平均值
Time per request: 7.539 [ms] (mean, across all concurrent requests)————————————————服务器平均请求处理时间,是吞吐率的倒数,mean表示它是平均值
Transfer rate: 1338.30 [Kbytes/sec] received————————————————单位时间从服务器获取的数据长度,这个统计项可以很好的说明服务器在处理能力达到极限时,其出口带宽的需求量。
Connection Times (ms)————————————————每个请求处理时间的分布情况
min mean[+/-sd] median max
Connect: 16 16 0.5 16 19
Processing: 38 51 47.8 41 292
Waiting: 20 23 3.0 23 43
Total: 54 67 47.8 57 308
Percentage of the requests served within a certain time (ms)————————————————每个请求处理时间的分布情况
50% 57
66% 58
75% 59
80% 59
90% 61
95% 96
98% 308
99% 308
100% 308 (longest request)。
其中有:
Requests per second=Complete requests/Time taken for tests
Time 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。
小结
这儿只是简单介绍了ab的用法,更多详细的option可以查看官方文档。
另外,ab可以直接在web服务器本地发起测试请求,这一点非常重要,因为我们通常希望测试的是服务器的处理时间,而不包括数据的网络传输时间以及用户PC本地的计算时间。需要清楚的是,ab进行一切测试的本质是基于HTTP的,所以可以说它是对web服务器软件的黑盒测试,它所获得的一切数据和计算结果都可以通过HTTP来解释。