网站压力测试(Apache)
in 奇淫技巧 with 0 comment
网站压力测试(Apache)
in 奇淫技巧 with 0 comment

介绍

ab是Apache自带的压力测试工具,它可以模拟各种条件,直接在服务器本地发起各种测试请求。

在命令行工具下输入:ab -V 可以查看ab工具的版本信息如下:

~ orange$ ab -V
This is ApacheBench, Version 2.3
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

好了,一切准备就绪,接下来我们使用ab来进行一次压力测试,请看下面的命令行信息。

测试

~orange% ab -n1000 -c10 https://blog.qqccy.cn/      
This is ApacheBench, Version 2.3 <$Revision: 1843412 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking blog.qqccy.cn (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
Server Hostname:        blog.qqccy.cn
Server Port:            443

Document Path:          /
Document Length:        291 bytes

Concurrency Level:      10
Time taken for tests:   10.921 seconds
Complete requests:      1000
Failed requests:        0
Non-2xx responses:      1000
Total transferred:      496000 bytes
HTML transferred:       291000 bytes
Requests per second:    91.57 [#/sec] (mean)
Time per request:       109.210 [ms] (mean)
Time per request:       10.921 [ms] (mean, across all concurrent requests)
Transfer rate:          44.35 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:       38   53  31.9     44     297
Processing:    38   54  31.2     44     256
Waiting:       38   53  31.2     44     256
Total:         76  107  58.4     88     467

Percentage of the requests served within a certain time (ms)
  50%     88
  66%     92
  75%     95
  80%     98
  90%    168
  95%    294
  98%    339
  99%    340
 100%    467 (longest request)

注释

请注意我们在启动ab时,传入3个命令行参数,它们正是代表了前面我们提到的前提条件
-n1000 表示总请求数为1000
-c10 表示并发用户数为10
https://blog.qqccy.cn/ 表示这些请求的目标URL
测试结果一目了然,我们看到的吞吐率为8255.66reqs/s。同时在测试结果中还有一些其他的内容也值得我们关注,主要包括下列项目。
Server Software 表示测试的Web服务器软件名称,这里是Apache/2.4.18,它来自于HTTP响应数据的头信息,所以如果是我们自己编写的Web服务器软件或者修改开源Web服务器的源代码,便可以随意的修改这里的名称,就像我们曾经用游戏修改器修改道具属性一样。
Server Hostname 表示请求的URL中主机部分名称,它来自于HTTP请求数据的头信息,这里我们请求的URL是https://blog.qqccy.cn/,所以主机名为blog.qqccy.cn,说明我们的请求是从Web服务器端发起的。
Server Port 表示测试的Web服务器软件监听的端口,为了方便测试,我们后面会对多个不同的Web服务器使用不同的监听端口。
Document Path 表示请求URL中根绝对路径,它同样来自HTTP请求数据的头信息,通过它的后缀名,我们一般可以了解该请求的类型。
Document Length 表示HTTP响应数据的正文长度。
Concurrency Level 表示并发用户数,这是我们设置的参数。
Time taken for tests 表示所有这些请求被处理完所花费的总时间。顺便提一下,某些Apache版本如2.2.4附带的ab,这一统计项存在一些计算上的bug,当总请求数较少时,其统计的总时间无法小于0.1s。
Complete requests 表示总请求数,这是我们设置的相应的参数。
Failed requests 表示失败的请求数,这里的失败是指在连接服务器,发送数据,接收数据等环节发生异常,以及无响应后的超时情况。对于超时时间的设置,可以使用ab的-t 参数。
如果接收的HTTP响应数据的头信息中含有2xx以外的状态码,则会在测试结果中显示另一个名为“Non-2xx responses”的统计项,用于统计这部分的请求数,这些请求并不算是失败的请求。
Total transferred 表示所有请求的响应数据长度总和,包括每个HTTP响应数据的头信息和正文数据的长度。注意,这里不包括HTTP请求数据的长度,所以Total transferred代表了从Web服务器流向用户PC的应用层数据总长度。通过使用ab的-v参数,即可查看详细的HTTP头信息。
HTML transferred 表示所有请求的响应数据中正文数据的总和,也就是减去了Total transferred中HTTP响应数据中头信息的长度。
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 这个统计可以很好的说明服务器在处理能力达到极限时,其出口带宽的需求量。利用前面介绍的有关带宽的知识,不难计算出结果。
Percentage of the requests served within a certain time(ms) 这部分数据用于描述每个请求处理时间的分布情况,比如在以上测试结果中80%请求的处理时间都不超过1ms,而99%的请求都不超过3ms。注意这里的处理时间,是指前面的Time per request,即对于单个用户而言,平均每个请求的处理时间。

Responses