【第十三课】性能测试与优化
性能测试
主旨:性能优化是性能测试——了解当前服务和机器的性能与核心性能指标
性能测试的角度
主观角度:用户感受到的性能
客观角度:性能指标衡量的性能
核心指标
响应时间
指应用系统从发送请求开始到接收到最后响应数据所需要的时间。
是系统重要的性能指标,直观的反映了系统的“快慢”。
并发数(负载特性)
系统能够同时处理请求的数目,这个数字也反馈了系统的负载特性。
并发数即系统并发用户数,指同时提交请求的用户数目,对于此相对应的还有在线用户数和系统用户。
吞吐量
指单位时间内系统处理的请求数量,体现系统的处理能力。
可以用“请求数/秒”或者“页面数/秒”来衡量,也可以用“访问人数/天”或是“处理业务数/小时”来衡量
吞吐量指标数据
TPS
HPS
QPS
相互关系
响应时间 —— 越短
并发数 —— 越高
吞吐量 —— 越大
吞吐量 = (1000/响应时间ms) * 并发数
处理其二得全部
性能计数器
描述服务器或操作系统性能的一些数据指标。
System Load
对象与线程数
内存使用
CPU使用
磁盘与网络I/O
性能测试方式
主要是通过以下几种测试方式验证系统的性能
性能测试
负载测试
压力测试
稳定性测试
性能测试(基准线-Y轴)
以系统设计初期规划的性能指标为预期目标,对系统不断施加压力,验证系统在资源可接受范围内,是否能达到性能预期。
负载测试(高峰线-Y轴)
对系统不断增加并发请求以增加系统压力,直到系统的某项或多项性能指标达到安全临界值。
如某种资源已经呈饱和状态,这时候继续对系统施加压力,系统的处理能力不但不能提高,反而会下降。
压力测试(崩溃线-Y轴)
超过安全负载的情况下,对系统继续施加压力,直到系统崩溃或不能再处理任何请求,以此获得系统最大压力承受能力。
稳定性测试(长期运行情况-X轴)
被测试系统在特定硬件、软件、网络环境条件下,给系统加载一定业务压力,使系统运行一段较长时间,以此检测系统是否稳定。
在生产环境,请求压力是不均匀的,呈波浪特性,因此为了更好地模拟生产环境,稳定性测试也应不均匀的对系统施加压力。
主要目的是要模拟系统在日常情况下的持久运行情况。
容易出现稳定性异常的例子:
缓存在高并发的时候存储的都是热数据,等流量下来时缓存会失效,当高并发请求再次到来时可能会出现缓存穿透的情况,系统是否能够扛的数就体现了系统的长期运行能力。
性能优化
基本原则
不能优化一个没有测试的软件
不能优化一个不了解的软件
❗️经验❗️
要以测试结果为依据进行测试。新的架构一定是解决实际问题而采用(不然过不了试用期 哈哈哈)
四大关键资源:CPU 内存 网络 磁盘 性能测试时需要重点关注这四点
Roadmap
性能测试,获取性能指标
指标分析,发现性能与资源瓶颈点
架构与代码分析,寻找性能与资源瓶颈关键所在
架构与代码优化,优化关键技术点,平衡资源利用
性能测试,进行性能优化闭环
性能测试 --> 数据指标 --> 分析瓶颈点 --> 分析框架和代码 --> 优化框架和代码 --> 性能测试
性能优化分层思想
Level 1: 机房与骨干网络性能优化
Level 2: 服务器与硬件性能优化
Level 3: 操作系统性能优化
Level 4: 虚拟机性能优化
Level 5: 基础组件性能优化
Level 6: 软件架构性能优化
Level 7: 软件代码性能优化
Level 1: 机房与骨干网络性能优化
优化方式:
异地多活的多机房架构(多数据中心)
专线网络与自主 CDN 建设(提高网络交换速度)
层次要求
这个层次需要了解整体网络与计算机的全部内容,并且在关键领域有具体的实践与经验。需要对公司主干网络有把控权。
效果
巨大。整体效果是最好的,细小的优化会收到大面积/全公司的收益提升。(要看公司规模与自己本身的位置)
投入
巨大。一般都是从现有规模优化到一个新的规模,会有较大投入。
Level 2: 服务器与硬件性能优化
优化方式:(垂直伸缩)
使用更加优秀的 CPU、硬盘、网卡
层次要求
需要对当前硬件或服务的功能、适用场景、承载能力有所了解
效果
适中 - 大。对软件性能优化可能是数量级的,有时候远超代码和架构的性能优化
投入
适中 - 大。主要是金钱成本,需要投入金钱来更新新硬件或服务。引入新的服务可能会对当前架构有一定的修改。
Level 3: 操作系统性能优化
优化方式:
了解操作系统在资源消耗上的开销
Level 4: 虚拟机性能优化
优化方式:
GC处理优化
Level 5: 基础组件性能优化
优化方式:
Level 6: 软件架构性能优化
优化方式:
缓存
异步
集群
Level 7: 软件代码性能优化
优化方式:
遵循面向对象的设计原则与设计模式。(大部分时候是因为烂代码决定了性能的上限)
并发编程,多线程与锁
资源复用,线程池与对象池
异步编程,生产者与消费者
数据结构,数组、链表、Hash表、树
评论