使用ab命令进行web server性能测试

  ApacheBench 是 Apache 服务器自带的一个web压力测试工具,简称ab。ab命令会创建多个并发访问线程,模拟多个访问者同时对某一URL地址进行访问。它的测试目标是基于URL的,因此,既可以用来测试Apache的负载压力,也可以测试nginx、lighthttp、tomcat、IIS等其它Web服务器的压力。ab命令对发出负载的计算机要求很低,既不会占用很高CPU,也不会占用很多内存,但却会给目标服务器造成巨大的负载,可能会造成目标服务器资源耗尽,严重时可能会导致死机。

  使用 ab -h 命令查看其支持的参数,如下所示:

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)


  下面看一个例子:

[root@nginx-dev ~]# ab -n 20000 -c 200 -p "post.txt" -T "application/json" "xxxxxxxxxxxxxxx.ad-survey.com/store/match"
Benchmarking xxxxxxxxxxxxxxx.ad-survey.com (be patient)
Completed 2000 requests
Completed 4000 requests
Completed 6000 requests
Completed 8000 requests
Completed 10000 requests
Completed 12000 requests
Completed 14000 requests
Completed 16000 requests
Completed 18000 requests
Completed 20000 requests
Finished 20000 requests


Server Software:        nginx
Server Hostname:        xxxxxxxxxxxxxxx.ad-survey.com
Server Port:            80

Document Path:          /store/match
Document Length:        5961 bytes

Concurrency Level:      200
Time taken for tests:   97.578 seconds
Complete requests:      20000
Failed requests:        16525
   (Connect: 0, Receive: 0, Length: 16525, Exceptions: 0)
Total transferred:      84152648 bytes
Total body sent:        59680000
HTML transferred:       80532648 bytes
Requests per second:    204.97 [#/sec] (mean)
Time per request:       975.775 [ms] (mean)
Time per request:       4.879 [ms] (mean, across all concurrent requests)
Transfer rate:          842.21 [Kbytes/sec] received
                        597.28 kb/s sent
                        1439.49 kb/s total

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.6      0      30
Processing:    17  968 895.8    793    7349
Waiting:       17  968 895.7    793    7349
Total:         18  968 895.7    793    7349

Percentage of the requests served within a certain time (ms)
  50%    793
  66%   1110
  75%   1378
  80%   1591
  90%   2160
  95%   2611
  98%   3162
  99%   3640
 100%   7349 (longest request)

  以上命令中用到的几个参数说明下:

    -n 20000:请求总数为20000

    -c 200:并发数为200

    -p "post.txt":POST请求携带的数据在当前目录的"post.txt"文件中

    -T "application/json":POST数据所使用的Content-type头信息

 

  测试结果解释说明

#服务器软件及其版本号
Server Software:        nginx
#服务器主机名
Server Hostname:        xxx-xxxxxxxxxxx.ad-survey.com
#服务器端口号
Server Port:            80

#请求URI,也就是请求的页面文档地址
Document Path:          /store/match
#页面文档大小,实际上是第一个成功返回的文档的字节大小。如果在测试期间文档长度发生变化,则认为响应是错误的。
Document Length:        5961 bytes

#并发数
Concurrency Level:      200
#整个测试持续的时间
Time taken for tests:   97.578 seconds
#完成的请求数量
Complete requests:      20000
#失败的请求数量
#如果该数字大于零,将打印另一行,显示由于连接、读取、内容长度不正确或异常而失败的请求的数量。
#需要注意的是,如果后续请求的响应大小与第一个请求的响应大小(Document Length值)不同,则此请求会被视为失败。因此,如果测试请求的响应大小不固定的话,
#Length失败请求数应该忽略!! Failed requests: 16525 (Connect: 0, Receive: 0, Length: 16525, Exceptions: 0) #从服务器接收的字节总数。这个数字实际上是通过网络发送的字节数。 Total transferred: 84152648 bytes #测试期间发送的字节总数。如果测试没有包含要发送的正文,就不会有这个字段。应该是POST请求的数据大小(所有请求之和) Total body sent: 59680000 #从服务器接收的文档字节总数。这个数字不包括HTTP报头中的字节数 HTML transferred: 80532648 bytes #吞吐率,指的是某个并发用户数下单位时间内处理的请求数【第一性能指标】 计算公式:总请求数 / 处理完成这些请求数所花费的时间,即Request per second = Complete requests / Time taken for tests Requests per second: 204.97 [#/sec] (mean) #用户平均请求等待时间【第二性能指标】 #计算公式:处理完成所有请求数所花费的时间 /(总请求数 / 并发用户数),即Time per request = Time taken for tests /( Complete requests / Concurrency Level) Time per request: 975.775 [ms] (mean) #服务器平均请求处理时间【第三性能指标】 #计算公式:处理完成所有请求数所花费的时间 / 总请求数,即Time taken for tests / Complete requests Time per request: 4.879 [ms] (mean, across all concurrent requests) #传输速率 Transfer rate: 842.21 [Kbytes/sec] received 597.28 kb/s sent 1439.49 kb/s total #消耗时间的分解、统计 #表示在Connect,Processing,Waiting,Total各阶段的耗时的最小值(min),平均值(mean),标准差([+/-sd]),中值(median),最大值(max)。 Connection Times (ms) min mean[+/-sd] median max Connect: 0 0 0.6 0 30 Processing: 17 968 895.8 793 7349 Waiting: 17 968 895.7 793 7349 Total: 18 968 895.7 793 7349 #在特定时间内处理请求数的百分比 Percentage of the requests served within a certain time (ms) 50% 793 #50%请求的响应时间在793ms内 66% 1110 #66%请求的响应时间在1110ms内 75% 1378 #以此类推 80% 1591 90% 2160 95% 2611 98% 3162 99% 3640 100% 7349 (longest request)


 

  参考:

  http://httpd.apache.org/docs/current/programs/ab.html

  https://www.jb51.net/article/28320.htm

 

上一篇:Element实现上传下载


下一篇:Asp.net core Enum as string