博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
2017-5-16/网站性能测试指标及网站压力测试
阅读量:4565 次
发布时间:2019-06-08

本文共 5917 字,大约阅读时间需要 19 分钟。

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
下载:(点击Fetch the software即可)
安装:
tar zxvf http_load-09Mar2016.tar.gzcd http_load-09Mar2016makesudo 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.334.7985 fetches/sec, 25318.5 bytes/sec// 说明每秒的响应请求为4.7985个,每秒传递的数据为25318.5 bytesmsecs/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 seconds2607 mean bytes/connection3.04131 fetches/sec, 7928.69 bytes/secmsecs/connect: 772.326 mean, 19478.3 max, 219.936 minmsecs/first-response: 830.46 mean, 10006.4 max, 237.957 minHTTP 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.23Server 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 maxConnect: 1 2 0.4 2 3Processing: 6 44 23.4 46 81Waiting: 6 44 23.5 46 81Total: 8 46 23.1 47 82// 网络上消耗的时间的分解Percentage of the requests served within a certain time (ms)50% 4766% 6075% 6680% 7290% 7695% 8098% 8299% 82100% 82 (longest request)// 这部分数据用于描述每个请求处理时间的分布情况,比如以上测试,66%的请求处理时间都不超过60ms,这个处理时间是指前面的Time per request,即对于单个用户而言,平均每个请求的处理时间。

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

3)siege
安装:从下载的siege包make && make install 失败,改用Homebrew安装
命令格式:
siege -c 并发数 -t 运行测试时间 URLsiege -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 MBResponse 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                // 每次传输所花最短时间

转载于:https://www.cnblogs.com/sunshineliulu/p/7509810.html

你可能感兴趣的文章
Windows 服务开发框架介绍 - Topshelf
查看>>
php,字符串(二)
查看>>
Sizzle前奏
查看>>
Paint Chain HDU - 3980(sg)
查看>>
Chales常用操作
查看>>
C++ 运算符重载<<
查看>>
windows镜像
查看>>
Flask 模板语法
查看>>
ZOJ FatMouse' Trade 贪心
查看>>
音乐播放器
查看>>
SQL COOKBOOK (Ch.1-10)
查看>>
创建数组
查看>>
dict使用
查看>>
[转] 移动平台Html5的viewport使用经验
查看>>
ASP.NET MVC的帮助类HtmlHelper和UrlHelper
查看>>
《Python数据科学手册》第五章机器学习的笔记
查看>>
ubuntu16.04 配置爬虫环境
查看>>
Centos7,PHP7安装swoole
查看>>
02_ListActive中响应事件 并LogCat输出
查看>>
doubleclick adx note
查看>>