ab进⾏压⼒测试详解
当你使⽤PHP(或其他编程语⾔)完成⼀个web程序的开发,并且web程序在Apache服务器上正常运⾏的时候,你有没有考虑过对你的Apache服务器及部署在其上的web程序进⾏⼀些压⼒测试呢?毕竟,真⾦不怕⽕炼,只要配置优化合理、程序代码运⾏性能良好、硬件撑得住,通过压⼒测试我们就能看到⼀个喜⼈的成绩。话⼜说回来,即使测试结果差强⼈意或者糟糕透了,我们也可以好好反思并到“问题出在哪⾥”。说了这么多废话,其实就是想告诉你⼀句:对服务器以及⽹站程序进⾏压⼒测试还是很有必要的。
要对Apache及其上的web程序进⾏压⼒测试其实⾮常简单,我们也不⽤再额外下载安装什么测试⼯具,因为Apache HTTP Server已经给我们准备了⼀个压⼒测试⼯具——ab。
ab,即Apache Benchmark,只要我们安装了Apache,就能够在Apache的安装⽬录中到它。它的居住地址是Apache安装⽬
录/。现在,我们就来看看如何使⽤ab.exe来进⾏压⼒测试。
在使⽤之前我们先来学习⼀下ab的⽤法。⾸先,我们输⼊cmd打开DOS窗⼝,然后将更改当前⼯作⽬录为:Apache安装⽬录/bin/。然后键⼊帮助命令ab -help(或者ab /?、ab -h),我们就可以看到如下的⽤法介绍界⾯。
通过上⾯的⽤法介绍可以得知,ab的使⽤⽅法就是输⼊如下DOS命令:
ab [可选的参数选项]需要进⾏压⼒测试的url
此外,我们再根据上⾯的⽤法介绍界⾯来详细了解每个参数选项的作⽤。
-n
下载apache即requests,⽤于指定压⼒测试总共的执⾏次数。
-c
即concurrency,⽤于指定压⼒测试的并发数。
-t
即timelimit,等待响应的最⼤时间(单位:秒)。
-b
即windowsize,TCP发送/接收的缓冲⼤⼩(单位:字节)。
-p
即postfile,发送POST请求时需要上传的⽂件,此外还必须设置 -T参数。
-u
即putfile,发送PUT请求时需要上传的⽂件,此外还必须设置 -T参数。
-T
即content-type,⽤于设置Content-Type请求头信息,例如: application/x-www-form-urlencoded,默认值为 text/plain。
-v
即verbosity,指定打印帮助信息的冗余级别。
-w
以HTML表格形式打印结果。
-i
使⽤HEAD请求代替GET请求。
-x
插⼊字符串作为table标签的属性。
-y
插⼊字符串作为tr标签的属性。
-z
插⼊字符串作为td标签的属性。
-C
添加cookie信息,例如:“Apache=1234”(可以重复该参数选项以添加多个)。
-H
添加任意的请求头,例如:“Accept-Encoding: gzip”,请求头将会添加在现有的多个请求头之后(可以重复该参数选项以添加多个)。-A
添加⼀个基本的⽹络认证信息,⽤户名和密码之间⽤英⽂冒号隔开。
-P
添加⼀个基本的代理认证信息,⽤户名和密码之间⽤英⽂冒号隔开。
-X
指定使⽤的代理服务器和端⼝号,例如:“126.10.10.3:88”。
-V
打印版本号并退出。
-k
使⽤HTTP的KeepAlive特性。
-k
使⽤HTTP的KeepAlive特性。
-d
不显⽰百分⽐。
-S
不显⽰预估和警告信息。
-g
输出结果信息到gnuplot格式的⽂件中。
-e
输出结果信息到CSV格式的⽂件中。
-r
指定接收到错误信息时不退出程序。
-
h
显⽰⽤法信息,其实就是 ab -help。
虽然ab可以配置的参数选项⽐较多,但是,⼀般情况下我们只需要使⽤形如ab -n 数字 -c 数字 url路径的命令即可。譬如,我们对位于本地Apache服务器上、URL为localhost/index.php的页⾯进⾏压⼒测试。测试总次数为1000,并发数为100(相当于100个⽤户同时访问,他们总共访问1000次)。我们输⼊DOS命令ab -n 1000 -c 100 localhost/index.php,打印结果如下:
F:\Apache2.2\bin>ab -n 1000 -c 100 localhost/index.php
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, ustech/
Licensed to The Apache Software Foundation, /
Benchmarking localhost (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Completed 600 requests
Completed 700 requests
Completed 800 requests
Completed 900 requests
Completed 1000 requests
Finished 1000 requests
Server Software:        Apache/2.2.25 (服务器软件名称及版本信息)
Server Hostname:        localhost (服务器主机名)
Server Port:            80 (服务器端⼝)
Document Path:          /index.php (供测试的URL路径)
Document Length:        10 bytes (供测试的URL返回的⽂档⼤⼩)
Concurrency Level:      100 (并发数)
Time taken for tests:  0.247 seconds (压⼒测试消耗的总时间)
Complete requests:      1000 (压⼒测试的总次数)
Failed requests:        0 (失败的请求数)
Write errors:          0 (⽹络连接写⼊错误数)
Total transferred:      198000 bytes (传输的总数据量)
HTML transferred:      10000 bytes (HTML⽂档的总数据量)
Requests per second:    4048.34 [#/sec] (mean) (平均每秒的请求数)
Time per request:      24.701 [ms](mean)(所有并发⽤户(这⾥是100)都请求⼀次的平均时间)
Time per request:      0.247 [ms](mean, across all concurrent requests)(单个⽤户请求⼀次的平均时间)
Transfer rate:          782.78 [Kbytes/sec] received (传输速率,单位:KB/s)
Connection Times (ms)
min  mean[+/-sd] median  max
Connect:        0    0  0.3      0      1
Processing:    6  23  4.2    24      30
Waiting:        5  20  5.3    21      29
Total:          6  23  4.2    24      30
Percentage of the requests served within a certain time(ms)
50%    24
66%    25
75%    26
80%    26
90%    27
95%    27
98%    28
99%    29
100%    30 (longest request)
在上⾯的测试中,我们设置的压⼒测试总次数以及并发数并没有让服务器感觉到什么“压⼒”,现在我们再来看⼀个“压⼒⼭⼤”的执⾏命令:ab -n 100000 -c 1000 localhost/index.php,这个时候apache就直接罢⼯——拒绝访问了:
F:\Apache2.2\bin>ab -n 100000-c 1000 localhost/index.php
This is ApacheBench, Version 2.3<$Revision:655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, ustech/ Licensed to The Apache Software Foundation, /
Benchmarking localhost (be patient)
Test aborted after 10 failures
apr_socket_connect():由于⽬标计算机积极拒绝,⽆法连接。(730061)

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。