网站性能测试指标及网站压力测试

1. 一般衡量网站性能有哪些指标?
性能指标主要有响应时间,吞吐量,并发量,性能计数器。
1)响应时间
指应用执行一个操作需要的时间,即从发出请求到最后收到响应数据所需要的时间。
系统常用操作响应时间表
操作
响应时间
打开一个网站
几秒
数据库查询一条记录(有索引)
十几毫秒
机械磁盘一次寻址定位
4毫秒
从机械磁盘顺序读取1M数据
2毫秒
从SSD磁盘顺序读取1M数据
0.3毫秒
从远程分布式换成Redis读取一个数据
0.5毫秒
从内存读取1M数据
十几微秒
Java程序本地方法调用
几微秒
网络传输2Kb数据
1微秒
实践中通常采用的办法是重复请求,比如一个请求操作重复执行1万次,测试一万次执行的总响应时间之和,然后除以1万,就得到单次请求的响应时间。
2)吞吐量
指单位时间内系统处理的请求数量,体现系统的整体处理能力。对于网站,可用“请求数/秒”、“页面数/秒”或“访问人数/天”、“处理业务数/小时”等来衡量。重要指标有TPS(每秒处理的事物数)、QPS(每秒查询的请求数)、HPS(每秒HTTP请求数)等。
3)并发量
指系统能够同时处理的请求的数目,这个数字反映了系统的负载性能。对于网站而言,并发数指网站用户同时提交请求的用户数目。
4)性能计数器
描述服务器或操作系统性能的一些数据指标。如System Load、对象与线程数、内存使用、CPU使用、磁盘与网络I/O等使用情况。通过对这些指标设置报警阈值,当监控系统发现性能计数器超过阈值时,就向开发人员和运维报警,及时发现异常并处理。
 
2. 怎么测试网站性能?
性能测试具体可以细分为性能测试、负载测试、压力测试、稳定性测试。
1)性能测试
以系统设计初期规划的性能指标为预期目标,对系统不断施加压力,验证系统在资源可接受范围内是否能达到预期。
2)负载测试
对系统不断增加并发请求以增加系统压力,直到系统的某项或多项性能指标达到安全临界值,这时继续对系统施加压力,系统的处理能力不但不会提高,反而会下降。
3)压力测试
超过安全负载的情况下,对系统施加压力,直到系统崩溃或不能再处理任何请求,以此获得系统最大压力承受能力。
4)稳定性测试
被测试系统在特定硬件、软件、网络环境条件下,给系统加载一定业务压力,使系统运行一段较长时间,以此检验系统是否稳定。
 
3. 怎么进行压力测试?
压力测试工具有http_load、apache ab、siege。
1)http_load
下载:http://acme.com/software/http_load/(点击Fetch the software即可)
安装:
tar zxvf http_load-09Mar2016.tar.gz
cd http_load-09Mar2016
make
sudo make install
注:遇到了Error1,但不影响使用。
(2017.9.12整理笔记时,又尝试了一下,发现可以用Homebrew安装http_load,当时怎么没想到用Homebrew安装啊。。。😑)
命令格式:
http_load -p 并发访问进程数 -f 访问总数 需要访问的URL文件 
http_load -r 每秒访问频率 -s 访问时间 需要访问的URL文件
// 参数说明:通常参数pf一起使用,参数rs一起使用。
-parallel 简写 -p :并发的用户进程数。
-fetches 简写 -f : 总计的访问次数。
-rate 简写 -r : 每秒的访问频率。
-seconds 简写 -s :总计的访问时间。

使用:

新建一个urls.txt,urls.txt 是一个url 列表,每个url 单独的一行。
在文件中加入一行:http://www.acme.com/software/http_load/
① 测试网站是否能承受住预期的访问压力
执行http_load -rate 5 -seconds 10 urls.txt,含义为在10秒内保持一定的频率访问目标url。
结果分析:
48 fetches, 6 max parallel, 253264 bytes, in 10.0031 seconds
// 说明在上面的测试中运行了48个请求,最大的并发进程数是6,总计传输的数据是253264bytes,运行的时间是10.0031秒
5276.33 mean bytes/connection
// 说明每次连接平均传输的数据量是5276.33bytes。253264/48=5276.33
4.7985 fetches/sec, 25318.5 bytes/sec
// 说明每秒的响应请求为4.7985个,每秒传递的数据为25318.5 bytes
msecs/connect: 251.601 mean, 1493.45 max, 26.176 min
// 说明每次连接的平均响应时间是251.601 毫秒,最大的响应时间1493.45 毫秒,最小的响应时间26.176 毫秒
msecs/first-response: 232.251 mean, 796.783 max, 39.402 min
// 说明每次连接的平均返回时间是232.251 毫秒,最大的响应时间796.783 毫秒,最小的响应时间39.402 毫秒
HTTP response codes:
code 200 -- 48
// 说明HTTP返回码是200,一共48次。
 
主要参考fetches/sec、msecs/connect数值,
前者对应QPS,表示每秒的响应请求数,后者对应response time,表示每个连接的响应时间。
 
② 测试网站每秒所能承受的平均访问量
执行http_load -parallel 5 -fetches 1000 urls.txt,含义为同时使用5个进程,随机访问urls.txt中的网址列表,总共访问1000次。
结果分析:
1000 fetches, 5 max parallel, 2。607e+06 bytes, in 328.806 seconds
2607 mean bytes/connection
3.04131 fetches/sec, 7928.69 bytes/sec
msecs/connect: 772.326 mean, 19478.3 max, 219.936 min
msecs/first-response: 830.46 mean, 10006.4 max, 237.957 min
HTTP response codes:
code 200 — 1000
 
从上面结果看,目标网站仅仅能够承受每秒3次的访问,不够强壮。

2)apache ab

ab是Apache自带的压力测试工具,可以用which ab查看ab命令所在的目录。

命令格式:
ab -c 并发数 -n 请求数 URL
// 参数说明:
-n 在测试会话中所执行的请求个数。默认时,仅执行一个请求
-c 一次产生的请求个数。默认是一次一个。
-t 测试所进行的最大秒数。其内部隐含值是-n 50000。它可以使对服务器的测试限制在一个固定的总时间以内。默认时,没有时间限制。

使用:

执行ab -n 100 -c 100 http://127.0.0.1/test/test.php,含义为同时处理100个请求并运行100次test.php,模拟100个并发用户,对一个页面发送100个请求。

结果分析:
Server Software: Apache/2.4.23 // 服务器名称,apache 版本2.4.23
Server Hostname: 127.0.0.1 // 服务器主机名
Server Port: 80 // 服务器端口
 
Document Path: /test/test.php // 请求的URL中的根绝对路径,通过该文件的后缀名,我们一般可以了解该请求的类型
Document Length: 54 bytes // HTTP响应数据的正文长度
 
Concurrency Level: 100 // 并发用户数
Time taken for tests: 0.085 seconds // 整个测试持续的时间,所有这些请求被处理完成所花费的总时间
Complete requests: 100 // 完成的请求数量
Failed requests: 0 // 失败的请求数量
Total transferred: 25600 bytes // 所有请求的响应数据长度总和,包括每个HTTP响应数据的头信息和正文数据的长度
HTML transferred: 5400 bytes // 所有请求的响应数据中正文数据的总和,也就是减去了Total transferred中HTTP响应数据中的头信息的长度。
Requests per second: 1177.59 [#/sec] (mean) // 吞吐率,计算公式:Complete requests/Time taken for tests。相当于每秒事务数,后面括号中的 mean 表示这是一个平均值。吞吐率越高,服务器性能越好。
Time per request: 84.919 [ms] (mean) // 用户平均请求等待时间,计算公式:Time token for tests/(Complete requests/Concurrency Level)。相当于平均事务响应时间 ,后面括号中的 mean 表示这是一个平均值。
Time per request: 0.849 [ms] (mean, across all concurrent requests) // 服务器平均请求等待时间,计算公式:Time taken for tests/Complete requests,正好是吞吐率的倒数。也可以这么统计:Time per request/Concurrency Level。
Transfer rate: 294.40 [Kbytes/sec] received //这些请求在单位时间内从服务器获取的数据长度,即平均每秒网络上的流量,计算公式:Total trnasferred/ Time taken for tests,这个统计很好的说明服务器的处理能力达到极限时,其出口宽带的需求量,可以帮助排除是否存在网络流量过大导致响应时间延长的问题。
 
Connection Times (ms)
min mean[+/-sd] median max
Connect: 1 2 0.4 2 3
Processing: 6 44 23.4 46 81
Waiting: 6 44 23.5 46 81
Total: 8 46 23.1 47 82
// 网络上消耗的时间的分解
Percentage of the requests served within a certain time (ms)
50% 47
66% 60
75% 66
80% 72
90% 76
95% 80
98% 82
99% 82
100% 82 (longest request)
// 这部分数据用于描述每个请求处理时间的分布情况,比如以上测试,66%的请求处理时间都不超过60ms,这个处理时间是指前面的Time per request,即对于单个用户而言,平均每个请求的处理时间。

并发请求量稍微高一点(200,300以上)就会报apr_socket_recv: Connection reset by peer 的错。

3)siege
安装:http://download.joedog.org/siege/下载的siege包make && make install 失败,改用Homebrew安装
命令格式:
siege -c 并发数 -t 运行测试时间 URL
siege -c 并发量 -r 重复次数 -f URL
// 参数说明:-r和-t一般不同时使用
-c 200 指定并发数200
-r 5 指定测试的次数5
-t 5 持续测试5分钟,-t如果不带单位,默认是分钟,s表示秒。
-f urls.txt 指定url的文件
-i internet的简写,随机发送url
-b 请求无需等待 delay=0

使用:

执行siege -c 10 -r 5 -f urllist.txt,含义为10个并发对urllist文件发送请求5次。

(-----中间滚屏略-----)
结果分析:
Transactions:                      300 hits           // 总共测试次数,完成300次处理
Availability:                   100.00 %              // 成功次数百分比,100.00 % 成功率
Elapsed time:                    31.36 secs           // 总共用时31.36秒
Data transferred:                 0.43 MB             // 共数据传输0.43 MB
Response time:                    0.90 secs           // 响应用时0.90秒
Transaction rate:                 9.57 trans/sec      // 平均每秒完成 9.57 次处理
Throughput:                       0.01 MB/sec         // 吞吐率,平均每秒传送数据
Concurrency:                      8.62                // 最高并发数
Successful transactions:           250                // 成功请求数
Failed transactions:                 0                // 失败请求数
Longest transaction:              3.66                // 每次传输所花最长时间
Shortest transaction:             0.50                // 每次传输所花最短时间
posted @ 2017-09-13 10:41  鹿呦呦  阅读(15861)  评论(2编辑  收藏  举报