您的位置:首页 > 运维架构 > 网站架构

web网站的压力测试

2016-03-29 16:00 429 查看
测试前的名词解释:
吞吐率

web服务器单位时间内处理的请求数。单位“reqs/s”
压力测试的前提

压力测试包含两部分:并发用户数和总请求数。简单来说就是:多少用户同时向服务器发送多少个请求。
请求:对请求的URL所代表的资源的描述,比如1KB大小的静态文件,或者包含10次数据库查询的动态内容等。
总结:吞吐率的前提包括如下几个条件:
a.并发用户数
b.总请求数
c.请求资源描述
并发用户数

并发用户数:某一时刻同时向服务器发送请求的用户总数。
从web服务器的角度看:实际并发用户数可以理解为Web服务器当前维护的代表不同用户的文件描述符总数,也就是并发连接数。不是说有多少的用户请求就建立多少的连接,当实际的用户请求数大于服务器所维护的文件描述符总数时,多出来的用户请求将会放在服务器内核的数据接收缓冲区中等待处理,在用户看来这些请求是处于阻塞状态的。
最大并发用户数和最大并发连接数的决定因素的本质区别:

当实际并发用户数稍稍大于服务器所能维护的文件描述符上限时,如果请求的性质决定了处理每个请求花费的时间非常少,比如请求1KB的静态网页,那么每个请求都可以快速被处理然后释放文件描述符,这样从用户角度而言,等待时间几乎不会减少太多。所以这种情况下,我们希望服务的最大并发用户数可以大于最大并发连接数。幸运的是,这种情况在我们后边介绍select模型在大并发下处理小文件请求时会有相应测试。
如果请求性质决定了处理每个请求要花费相当长的时间,比如下载10MB文件或者请求动态内容,那么即使服务器可以支持较大的并发连接数,比如使用异步I/O理论上可能支持2万个并发连接,然而是否能为这么多接入的用户提供快速响应的服务至关重要。对于下载10MB文件来说,可能由于带宽的瓜分导致每个用户等待时间过长。所以这种情况下,我们希望服务的最大并发用户数小于理论上的最大并发连接数。

web服务器的本质工作

争取以最快的速度将内核缓冲区中的用户请求数据一个不剩地都拿回来,然后尽最大努力同时快速处理完这些请求,并将响应数据放到内核维护的另一块用于发送数据的缓冲区中,接下来尽快处理下一波请求,并尽量不要让用户请求在内核缓冲区中等太久。
请求等待时间

用户平均请求等待时间
服务器平均请求处理时间

以常用的web压力测试工具ab举例:
[root@lnmp ~]# ab -n10000 -c100 http://www.chborg.com/test
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.chborg.com (be patient)
Completed 1000 requests
Completed 2000 requests
Completed 3000 requests
Completed 4000 requests
Completed 5000 requests
Completed 6000 requests
Completed 7000 requests
Completed 8000 requests
Completed 9000 requests
Completed 10000 requests
Finished 10000 requests

Server Software: nginx
Server Hostname: www.chborg.com
Server Port: 80

Document Path: /test
Document Length: 189 bytes

Concurrency Level: 100
Time taken for tests: 0.832 seconds
Complete requests: 10000
Failed requests: 0
Write errors: 0
Total transferred: 4290000 bytes
HTML transferred: 1890000 bytes
Requests per second: 12018.03 [#/sec] (mean)
Time per request: 8.321 [ms] (mean)
Time per request: 0.083 [ms] (mean, across all concurrent requests)
Transfer rate: 5034.90 [Kbytes/sec] received

Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.6 0 4
Processing: 1 8 2.5 8 16
Waiting: 0 7 2.7 8 16
Total: 3 8 2.2 8 16

Percentage of the requests served within a certain time (ms)
50% 8
66% 9
75% 10
80% 10
90% 11
95% 12
98% 12
99% 14
100% 16 (longest request)

3个命令行参数,代表3个前提条件:
-n10000表示请求总数为10000
-c100表示并发用户数为100 http://www.chborg.com/test表示请求的目标URL Requests per second: 12018.03 [#/sec] (mean)表示吞吐率
Server Software
表示被测试的web服务器软件名称,它来自于http响应数据的头信息,这里是可以通过修改web软件源码随意更改的
Server Hostname
表示请求的URL主机部分名称,它来自于http请求数据的头信息,这里我们请求的URL是http://www.chborg.com/test,所以主机名为www.chborg.com
Server Port
web服务器的监听端口
Document Path
请求的URL中的根绝对路径,同样来自于http请求数据的头信息。
Document Length
表示http响应数据的征文长度
Concurrency Level
表示并发用户数,我们自己设定的参数
Time taken for tests
表示所有这些请求被处理完成所花费的总时间。
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
Transfer rate
表示请求在单位时间内从服务器获取的数据长度=Total transferred/Time taken for tests
这个统计可以很好地说明服务器在处理能力达到极限时,其出口带宽的需求量。
Percentage of the requests served within a certain time (ms)
可以看出请求处理时间的分布。

测试案例1
[root@lnmp ~]# ab -n10000 -c2000 http://www.chborg.com/test 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.chborg.com (be patient)
socket: Too many open files (24)
[root@lnmp ~]# ulimit -n
1024
正常情况下你如果没有修改服务器允许所打开的文件描述符的大小时,在这里我用的是centos-6.5,内核版本为
默认允许打开文件描述符的最大值为1024(ulimit -n);可修改为65535(ulimit -n 65535)。刚好与上述:实际并发用户数可以理解为Web服务器当前维护的代表不同用户的文件描述符总数。相对应!!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  压力测试