性能测试是性能优化的前提和基础, 也是性能优化结果的检查和度量标准。不同视角下的网站性能有不同的标准 , 也有不同的优化手段。
一般来说,性能测试基本上会有以下几个视角的指标:
1.用户角度下。
2.开发人员角度。
3.运维人员角度。
不同的视角下会有不同的性能指标,不同的标准也会有不同的指标,一般来说,从开发到测试,网站性能测试的主要指标主要有几点:响应时间、并发数、吞吐量、性能计数器等,下面我就分别总结一下。
一、响应时间
通俗来讲,就是一个从客户端或者浏览器端发起请求后到最后得到响应的这段时间。直观的反应了系统的快慢。
注:
我们可以使用测试程序模拟应用程序,记录收到响应和发出请求的时间差的平均,来计算平均响应时间,但是记录和获取时间操作也是需要花费时间的,如果测试目标操作本身需要花费的时间很少,几微秒,那么很难得到系统的响应时间。
实践中通常采用的办法是重复请求,比如一 个请求操作重复执行一 万次, 测试一 万次执行需要的总响应时间之和,然后除以一 万,得到单次请求的响应时间。
二、并发数
指系统能够同时处理请求的数量,根据这个数量可以得到系统的负载性。对于网站而言,并发数即使网站用户并发用户数,指同时提交请求的用户数。
同时关于用户数还会有以下的一个公式:
网站系统用户数>>网站在线用户数>>网站并发用户数
一般而言,我们的产品设计初期,产品经理和运营人员需要规划不同发展阶段的网站系统用户数,并以此为依据,规划不同阶段的网站的并发用户数,让开发进行参考开发。
测试程序通过多线程模拟并发用户的办法来测试系统的并发处理能力,为了真实模拟用户行为,测试程序并不是启动多线程然后不停地发送请求,而是在两次请求之间加入一 个随机等待时间, 这个时间被称作思考时间。
三、吞吐量
吞吐量是指单位时间内系统处理的请求数量,体现系统的整理处理能看。使用"请求数/秒"、"业务处理数/小时"。像TPS(每秒事务数是吞吐量的一个常用的量化指标),还有HPS(每秒http请求数),QPS(每秒查询数)
在系统并发数由小逐渐增大的过程中(这个过程也伴随着服务器系统资源消耗逐渐增大), 系统吞吐量先是逐渐增加, 达到一个极限后,随着并发数的增加反而下降, 达到系统崩溃点后,系统资源耗尽,吞吐量为零。
而这个过程中 , 响应时间则是先保持小幅上升, 到达吞吐量极限后, 快速上升, 到达系统崩溃点后,系统失去响应。
网站性能优化的目的 , 除了改善用户体验的响应时间, 还要尽量提高系统吞吐量最大限度利用服务器资源。
四、性能计数器
它是描述服务器或操作系统性能的一些数据指标。包括 System Load 、对象与线程数内存使用、CPU 使用、磁盘与网络 I/0 等指标。这些指标也是系统监控的重要参数,对这些指标设置报警阔值, 当监控系统发现性能计数器超过阙值时, 就向运维和开发人员报警, 及时发现处理系统异常。
System Load 即系统负载, 指当前正在被CPU 执行和等待被CPU 执行的进程数目总和,是反映系统忙闲程度的重要指标。多核 CPU 的情况下,完美情况是所有CPU 都在使用, 没有进程在等待处理, 所以Load 的理想值是 CPU 的数目。当Load 值低于 CPU 数目的时候, 表示CPU 有空闲, 资源存在浪费;当Load 值高于CPU 数目的时候,表示进程在排队等待 CPU 调度, 表示系统资源不足, 影响应用程序的执行性能。在 Linux 系统中使用 top 命令查看, 该值是三个浮点数,表示最近 1分钟, 10 分钟,15 分钟的运行队列平均进程数。xQ
关于top命令查看系统性能指标,能够看我这篇文章:
jvm定位问题与排查
性能测试方法
性能测试是一个总称,具体可细分为性能测试、负载测试、压力测试、稳定性测试。
性能测试
以系统设计初期规划的性能指标为预期目标,对系统不断施加压力,验证系统在资源可接受范围内,是否能达到性能预期。
负载测试
对系统不断地增加并发请求以增加系统压力,直到系统的某项或多项性能指标达到安全临界值,如某种资源巳经呈饱和状态,这时继续对系统施加压力,系统的处理能力不但不能提高,反而会下降。查看这时候系统的负载。
压力测试
超过安全负载的情况下,对系统继续施加压力,直到系统崩溃或不能再处理任何请求,以此获得系统最大压力承受能力。
稳定性测试
被测试系统在特定硬件、软件、网络环境条件下,给系统加载一定业务压力,使系统运行一 段较长时间,以此检测系统是否稳定。
性能测试是一个不断对系统增加访问压力,以获得系统性能指标、最大负载能力最大压力承受能力的过程。所谓的增加访间压力,在系统测试环境中,就是不断增加测试程序的并发请求数,一般说来,性能测试遵循如图:
横坐标表示消耗的系统资源,纵坐标表示系统处理能力(吞吐量)。在开始阶段,随着并发请求数目的增加,系统使用较少的资源就达到较好的处理能力(a b段),这一段是网站的日常运行区间,网站的绝大部分访间负载压力都集中在这一 段区间被称作性能测试.测试目标是评估系统性能是否符合需求及设计目标;随着压力的持续增加,系统处理能力增加变缓,直到达到一 个最大值 (c 点),这是系统的最大负载点,这一 段被称作负载测试。测试目标是评估当系统因为突发事件超出日常访问压力的情况下,保证系统正常运行情况下能够承受的最大访问负载压力;超过这个点后, 再增加压力, 系统的处理能力反而下降, 而资源消耗却更多,直到资源消耗达到极限 (d 点),这个点可以看作是系统的崩溃点,超过这个点继续加大并发请求数目,系统不能再处理任何请求,这一 段被称作压力测试,测试目标是评估可能导致系统崩溃的最大访问负载压力。
根据性能测试,我们可以做出性能测试报告:
性能测试报告能够反映上述性能测试曲线的规律,可以得到系统性能是否满足设计目标和业务要求 、系统最大负载能力、系统最大压力承受能力等重要信息.关于性能优化的策略
排查一个网站的性能瓶颈和排查一个程序的性能瓶颈的手法基本相同:检查请求处理的各个环节的日志,分析哪个环节响应时间不合理、 超过预期;然后检查监控数据,分析影响性能的主要因素是内存、 磁盘、 网络、 还是 CPU , 是代码问题还是架构设计不合理,或者系统资源确实不足。
找到问题后就可以进行性能优化了。一般分为三类:
前端优化
服务器端优化
存储数据库优化
具体的优化后面会更新
摘自《大型网站技术架构核心原理与实践》阅读笔记