不同视角下有不同的性能标准,不同的标准有不同的测试指标。
从开发和测试人员的视角,网站性能测试的主要标准有响应时间、并发数、吞吐量、性能计数器等。
1.响应时间
指应用执行一个操作需要的时间,包括从发出请求到收到最后响应数据所需的时间。
响应时间是系统最重要的性能指标,只观的反应了系统的快慢。
操作 | 响应时间 |
打开一个网站 | 几秒 |
在数据库中查询一条记录(有索引) | 十几毫秒 |
机械磁盘一次寻址定位 | 4毫秒 |
从机械磁盘顺序读取1MB数据 | 2毫秒 |
从SSD磁盘顺序读取1MB数据 | 0.3毫秒 |
从远程分布式缓存Redis读取一个数据 | 0.5毫秒 |
从内存中读取1MB数据 | 十几微秒 |
Java程序本地调用 | 几微秒 |
网络传输2KB数据 | 1微秒 |
测试程序通过模拟应用程序,记录收到响应和发出请求之间的时间差来计算系统响应时间。
但是记录及获取系统时间这个操作也需要花费一定的时间,如果测试目标本身需要花费的时间极少,
比如几微秒,那么测试程序就无法测试得到系统的响应时间。
实践中通常采用的办法是重复请求,比如一个请求操作独立执行一万次,
测试一万次执行需要的总响应时间之和,然后除以一万,得到单次请求的响应时间。
2.并发数
指系统能够同时处理请求的数目,这个数字也反应了系统的负载特性。
对于网站而言,并发数即网站并发用户数,指同时提交的用户数目。
与网站并发用户数相对应的还有网站在线用户数(当前登录网站的用户总数)
和网站系统用户总数(可能访问系统的总用户数,对于多数网站而言就是用户注册数)。其数量比较关系为:
网站系统用户数>>网站在线用户数>>网站并发用户数
在网站产品设计初期,产品经理和运营人员就需要规划不同发展阶段的网站系统用户数,
并以此为基础,根据产品特性和运营手段,推算出在线用户数和并发用户数。这些将成为系统非功能设计的重要依据。
测试程序通过多线程模拟并发用户的方法来测试系统的并发处理能力,为了真实模拟用户行为,
测试程序并不是启动多线程然后不停地发送器请求,而是在两次请求之间加入一个随机等待时间,这个时间被称作思考时间。
3.吞吐量
指单位时间内系统处理地请求数量,体现系统的整体处理能力。
对于网站,可以用“请求数/秒”或是“页面数秒”来衡量,也可以用“访问人数/天”或是“处理的业务数/小时”等来衡量。
TPS(每秒事务)是吞吐量的一个常用量化指标,此外还有HPS(每秒HTTP请求数)、QPS(每秒查询数)等。
在系统并发由小逐渐增大的过程中(这个过程也伴随着服务器系统资源消耗逐渐增大),
系统吞吐量先是逐渐增加,达到一个极限后,随着并发数的增加反而下降,达到系统崩溃点后,系统资源耗尽,吞吐量为零。
而这个过程中,响应时间则是先保持小幅上升,达到吞吐量极限后,快速上升,到达崩溃点后,系统失去响应。
系统吞吐量、系统并发数及响应时间之间的关系可以用下面的例子很好的展示。
系统吞吐量和系统并发数,以及响应时间的关系可以形象地理解为高速公路地通行状况:
吞吐量为每天通过收费站地车辆数目(可以换算成收费站收取的高速费),
并发数是高速公路上正在行驶的车辆数目,响应时间是车速。
车辆很少时,车速很快,但是收到的高速费也相对较少;
随着车辆的继续增加,车速变得越来越慢,高速公路越来越堵,收费不增反降;
如果车流量继续增加,超过某个极限后,任何偶然因素都会导致高速全部瘫痪,
车走不动费当然也收不着,而高速公路成了停车场,资源耗尽。
网站性能优化的目的,除了改善用户的体验的响应时间,还要尽量提高系统的吞吐量,最大限度利用服务器资源。
4.性能计数器
它是描述服务器或操作系统性能的一些数据指标。包括System Load、对象与线程数、内存使用、CPU使用、磁盘与网络IO等指标。
这些指标也是系统监控的重要参数,对这些指标设置报警阀值,当监控系统发现性能计数器超过阀值时,
就像运维和开发人员报警,及时发现处理系统异常。
System Load即系统负载,指当前正在被CPU执行和等待被CPU执行的进程数目总和,是反映系统忙闲程度的重要指标。
多核CPU的情况下,完美情况是所有CPU都在使用,没有进程在等待处理,所以Load的理想值是CPU的数目。
当Load值低于CPU数目的时候,表示CPU有空闲,资源在浪费;
当Load值高于CPU数目的时候,表示进程在等待CPU调度,表示系统资源严重不足,影响应用程序的执行能力。
在Linux系统中使用top命令查看,该值是三个浮点数,表示最近1分钟,5分钟,15分钟的运行队列平均进程数。