压力测试是性能调优过程中必不可少的一环。只有让服务器处在高压情况下才能真正体现出各种设置所暴露的问题。Apache中有个自带的,名为ab的程序,可以对Apache或其它类型的服务器进行网站访问压力测试。
ab命令原理
ab命令会创建很多的并发访问线程,模拟多个访问者同时对某一URL进行访问。它的测试目标是基于URL的,因此,既可以用来测试Apache的负载压力,也可以测试nginx、lighthttp、IIS等其它Web服务器的压力
ab命令对发出负载的计算机要求很低,既不会占用很多CPU,也不会占用太多的内存,但却会给目标服务器造成巨大的负载,因此是某些DDOS攻击之必备良药,老少皆宜。自己使用也须谨慎。否则一次上太多的负载,造成目标服务器直接因内存耗光死机,而不得不硬重启,得不偿失。
ab实战
在Windows系统下,打开cmd命令行窗口,定位到apache安装目录的bin目录下;
对于Linux系统,一般安装好Apache后可以直接执行;
1 | ab -n 10000 -c 100 http://www.xxx.com/ |
-n后面的1000代表总共发出10000个请求;-c后面的100表示采用100个并发(模拟100个人同时访问),后面的网址表示测试的目标URL。
稍等片刻,会得到类似如下回显:
01 | This is ApacheBench, Version 2.0.40-dev <$Revision: 1.146 $> apache-2.0 |
02 | Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ |
03 | Copyright 1997-2005 The Apache Software Foundation, http://www.apache.org/ |
05 | Benchmarking localhost (be patient) |
16 | Server Software: Apache/2.0.52 |
17 | Server Hostname: localhost |
21 | Document Length: 1494 bytes |
25 | Time taken for tests: 3.296875 seconds |
27 | Complete requests: 1000 |
31 | /*保持联机连接的请求数量。只有在命令行中使用-k,才能看到该属性值。*/ |
32 | Keep-Alive requests: 1000 |
34 | Total transferred: 1987070 bytes |
36 | HTML transferred: 1494000 bytes |
38 | Requests per second: 303.32 [#/sec] (mean) |
40 | Time per request: 329.688 [ms] (mean) |
42 | Time per request: 3.297 [ms] (mean, across all concurrent requests) |
43 | /*平均每秒网络上的流量,可以帮助排除是否存在网络流量过大导致响应时间延长的问题*/ |
44 | Transfer rate: 588.44 [Kbytes/sec] received |
47 | min mean[+/-sd] median max |
49 | Processing: 0 212 69.4 218 406 |
50 | Waiting: 0 211 69.5 218 406 |
51 | Total: 0 212 69.3 218 406 |
52 | /*下面的内容为整个场景中所有请求的响应情况。在场景中每个请求都有一个响应时间,其中 50% 的用户响应时间小于 218 毫秒,66 % 的用户响应时间小于 234 毫秒,最大的响应时间小于 406 毫秒*/ |
54 | Percentage of the requests served within a certain time (ms) |
63 | 100% 406 (longest request) |
根据个人经验,真正在远程对Apache进行压力测试,往往效果会非常不明显(因为网络延时过大),因此在某些情况下,建议干脆在VPS上对localhost进行测试(虽然理论上对真实结果有影响,但实际几乎没什么误差)