项目性能优化—性能优化的指标、目标
性能优化的终极目标是什么
性能优化的目标实际上是为了更好的用户体验:
一般我们认为用户体验是下面的公式:
用户体验 = 产品设计(非技术)+ 系统性能 ≈ 系统性能 = 快
那什么样的体验叫快呢?
3秒定理
一般我们认为网站页面的加载速度在3秒以内就可以称作合格了,加载速度越趋近于0,越快。
3秒定理:Strangeloop在对比了众多网站,并对其性能进行分析之后得出了一个著名的3秒定理,当网站页面加载速度超过3秒后,57%的访客会离开这个网站。
如果想让我们的系统快起来,就要做性能调优。
项目性能优化
以下可以做为优化的标准:
- 前端工程师:首屏时间、白屏时间、可交互时间、完全加载时间;
- 移动端工程师:端到端响应时间、Crash率、内存使用率、FPS;
- 后端工程师:RT、TPS、并发数。
- 影响因素1:数据库读写、RPC、网络IO、逻辑计算复杂度、缓存
- 影响因素2:JVM[Throughput吞吐量、Footprint访存足迹、Latency延迟]
影响性能的关键要素
- 产品设计:产品逻辑、功能交互、动态效果、页面元素
- 基础网络:网络=连接介质+计算终端
- 代码质量&架构
- 移动端环境:设备类型&性能、网络
- 硬件及云服务:服务器硬件等
我们怎么去分析性能因素呢,就是既不要去做过度的优化,也不要让某个内容作为短板。
我们怎么找到系统的短板在哪里呢?就是需要进行压力测试。
压力测试
什么是压力测试
压力测试:压力测试是针对特定系统或者组件,为要确认其稳定性而特意进行的严格测试。会让系统在超过正常使用条件下运作,然后再确认其结果。
实际上就是对系统不断施加压力,来预估系统负载能力的一种测试。
什么时候做压测
一般而言,只要在系统基础功能验证完成、系统趋于稳定的情况下,才会进行压力测试。
压测目的
- 当负载逐渐增加时,观察系统各项性能指标的变化情况是否有异常;
- 发现系统的性能短板,进行针对性的性能优化;
- 判断系统在高并发情况下是否会报错,进程是否会挂掉;
- 测试在系统某个方面达到瓶颈时,粗略估计系统性能的上限;
压测的指标
指标 | 含义 |
---|---|
响应时间(RT) | 是指系统对请求作出响应的平均时间,对于单用户系统,响应时间可以很好地度量系统的性能。 |
吞吐量(Throughput) | 是指系统在单位时间内处理请求的数量,每秒事务数TPS也算是吞吐量的一种 |
资源利用率 | CPU占用率、内存使用率、系统负载、网络I/O |
并发用户数 | 是指系统可以同时承载的正常使用系统功能的用户的数量,用户不同的使用模式会导致不同用户在单位时间发出不同数量的请求。 |
错误率 | 失败请求占比,在测试时添加响应断言,验证不通过记为错误;若不添加,响应码为非200即为错误。 |
响应时间、并发用户数、吞吐量、资源使用率存在一定关系,如下图:
图的解释:
线走势:
-
绿线:随着用户增长,资源利用率会提升;
-
紫线:随着用户增长,吞吐量会上升,然后下降;
-
蓝线:随着用户增长,响应时间的变化趋势;
区域
图中有三个区域:轻负载区、重负载区、塌陷区。
两个横坐标点
第一条虚线的横坐标:最优并发用户数;
第二条虚线的横坐标:最大并发用户数。