Apache自带的压力测试工具――ab初体验

我们知道压力测试的软件确实很多,诸如微软的WAST,惠普的LoadRunner以及等等其他的,但这些软件学习起来还是需要花费些时间,在选择上实在头痛,后来在郭欣的那本《构建高性能WEB站点》上看到了他介绍的这款Apache自带的压力测试工具ab,十分喜爱,于是今天终于有机会体验下ab对网站的压力测试。

    实验之前我的apache已经安装了,操作系统:Ubuntu 10.04 VMware 7.0

1、先查看一下版本信息 ab -V(注意是大写的V)


  • studiogang@studiogang$ ab -V

     
  • This is ApacheBench, Version 2.3 <$Revision: 655654 $>  
     
  • Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/  
     
  • Licensed to The Apache Software Foundation, http://www.apache.org/  
     

2、我们也可以使用小写的v查看下ab命令的一些属性 ab -v


  • studiogang@studiogang$ ab -v  
     
  • ab: option requires an argument -- v  
     
  • ab: wrong number of arguments  
     
  • Usage: ab [options] [http[s]://]hostname[:port]/path  
     
  • Options are:  
     
  •     -n requests     Number of requests to perform  
     
  •     -c concurrency  Number of multiple requests to make  
     
  •     -t timelimit    Seconds to max. wait for responses  
     
  •     -b windowsize   Size of TCP send/receive buffer, in bytes  
     
  •     -p postfile     File containing data to POST. Remember also to set -T  
     
  •     -u putfile      File containing data to PUT. Remember also to set -T  
     
  •     -T content-type Content-type header for POSTing, eg.  
     
  •                     'application/x-www-form-urlencoded'  
     
  •                     Default is 'text/plain'  
     
  •     -v verbosity    How much troubleshooting info to print  
     
  •     -w              Print out results in HTML tables  
     
  •     -i              Use HEAD instead of GET  
     
  •     -x attributes   String to insert as table attributes  
     
  •     -y attributes   String to insert as tr attributes  
     
  •     -z attributes   String to insert as td or th attributes  
     
  •     -C attribute    Add cookie, eg. 'Apache=1234. (repeatable)  
     
  •     -H attribute    Add Arbitrary header line, eg. 'Accept-Encoding: gzip'  
     
  •                     Inserted after all normal header lines. (repeatable)  
     
  •     -A attribute    Add Basic WWW Authentication, the attributes  
     
  •                     are a colon separated username and password.  
     
  •     -P attribute    Add Basic Proxy Authentication, the attributes  
     
  •                     are a colon separated username and password.  
     
  •     -X proxy:port   Proxyserver and port number to use  
     
  •     -V              Print version number and exit  
     
  •     -k              Use HTTP KeepAlive feature  
     
  •     -d              Do not show percentiles served table.  
     
  •     -S              Do not show confidence estimators and warnings.  
     
  •     -g filename     Output collected data to gnuplot format file.  
     
  •     -e filename     Output CSV file with percentages served  
     
  •     -r              Don't exit on socket receive errors.  
     
  •     -h              Display usage information (this message)  
     
  •     -Z ciphersuite  Specify SSL/TLS cipher suite (See openssl ciphers)  
     
  •     -f protocol     Specify SSL/TLS protocol (SSL2, SSL3, TLS1, or ALL)  
     

3、现在我们就对51CTO的网站进行一次压力测试吧,使用命令ab -n1000 -c10 http://www.51cto.com/index.php,其中 -n1000 表示总请求数 -c10表示并发用户数为10 http://www.51cto.com/index.php 表示请求的URL,下面是测试的结果,其中我们最关心的三个指标,我已经注释出来了。


 


  • studiogang@studiogang$ ab -n1000 -c10 http://www.51cto.com/index.php

     
  • This is ApacheBench, Version 2.3 <$Revision: 655654 $>  
     
  • Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/  
     
  • Licensed to The Apache Software Foundation, http://www.apache.org/  
     


  •  

  •  
  • Benchmarking www.51cto.com (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  
     


  •  
  • /*WEB服务器用的是nginx*/
     
  • Server Software:        nginx  
     
  • Server Hostname:        www.51cto.com  
     
  • Server Port:            80

     


  •  
  • Document Path:          /index.php  
     
  • Document Length:        154 bytes  
     


  •  
  • Concurrency Level:      10

     
  • Time taken for tests:   74.373 seconds  
     
  • Complete requests:      1000

     
  • Failed requests:        0

     
  • Write errors:           0

     
  • Non-2xx responses:      1000

     
  • Total transferred:      330000 bytes  
     
  • HTML transferred:       154000 bytes
     
  • /*大家最关心的指标之一,指的是吞吐率
     
  • 相当于 LR 中的
    每秒事务数
    ,后面括号中的 mean 表示这是一个平均值*/  
     
  • Requests per second:    13.45 [#/sec] (mean)
     
  • /*大家最关心的指标之二,指的是用户平均请求等待时间
     
  • 相当于 LR 中的
    平均事务响应时间
    ,后面括号中的 mean 表示这是一个平均值*/
     
  • Time per request:       743.726 [ms] (mean)
     
  • /*大家最关心的指标之三,指的是服务器平均请求处理时间
     
  • Time per request:       74.373 [ms] (mean, across all concurrent requests)  
     
  • Transfer rate:          4.33 [Kbytes/sec] received  
     


  •  
  • Connection Times (ms)  
     
  •               min  mean[+/-sd] median   max  
     
  • Connect:      129
    163 245.3
    145
    3154

     
  • Processing:   129
    576 1510.8
    147
    11756

     
  • Waiting:      129
    567 1502.0
    147
    11756

     
  • Total:        261
    739 1543.7
    294
    11888

     


  •  
  • Percentage of the requests served within a certain time (ms)  
     

  • 50%
    294

     

  • 66%
    297

     

  • 75%
    304

     

  • 80%
    308

     

  • 90%
    1290

     

  • 95%
    3452

     

  • 98%
    7582

     

  • 99%
    7962

     

  • 100%
    11888 (longest request)  
     

4、为了使结果更有对比性,我们将并发用户更改为100个进行压力测试,我这里只将三个指标贴出来。


  • Requests per second:    190.95 [#/sec] (mean)  
     
  • Time per request:       523.694 [ms] (mean)  
     
  • Time per request:       5.237 [ms] (mean, across all concurrent requests)  
     

5、将并发用户改为200个进行测试


  • Requests per second:    186.00 [#/sec] (mean)  
     
  • Time per request:       1149.433 [ms] (mean)  
     
  • Time per request:       5.747 [ms] (mean, across all concurrent requests)  
     

6、500个并发用户时的情况


  • Requests per second:    180.99 [#/sec] (mean)  
     
  • Time per request:       2631.662 [ms] (mean)  
     
  • Time per request:       5.263 [ms] (mean, across all concurrent requests)  
     

     我们来分析下测试的结果,先对比下吞吐率,当并发用户的时候吞吐率最高为190 reqs/s,当并发用户数为200,500 吞吐率下降了,随之用户的等待时间更是明显增加了,已经有2s的等待时间了。这说明性能明显下降了。当然分析这个测试结果并不是说明51CTO的网站的并发用户只能在500左右,因为我是在服务器负荷的情况下就行测试的,这显然不能说明问题。另外我们在生产环境下测试的时候,最好能将测试结果做成报表,这样可以非常清晰地对比出问题来,好了,我该准备下,给上面提交一份我们公司网站的测试报告了。


 

你可能感兴趣的:(ab,压力测试)