性能优化的几个指标
- QPS(每秒响应请求数量)
QPS的提升,说明程序能够支持更大的并发,支持更多人同时在线
- 延迟(执行时间)
低延迟,说明响应速度快
- 内存的使用率
内存的飙高,往往涉及到内存溢出能一系列问题,也能看出我们对JVM的管理
- 磁盘吞吐
往往能为我们展现出I/O的使用情况
- CPU
CPU问题往往涉及到多线程,锁,死循环等等
- 网络吞吐
能够描述网络的使用情况
- ...
性能优化的几大原则
- 数据至上
我们在分析定位性能问题,都需要有数据作为支撑,我们可以通过日志,压测等来分析问题,不能凭借感觉,我们应该查看系统监控界面,定位分析瓶颈出在哪里。
- 禁忌过早优化
过早的优化不光起不到明显效果,还可能南辕北辙。
- 禁忌过度优化
优化经常会是以空间换时间之类的,可能在某个角度被优化了,但站在其它角度又带来了新的问题
- 不能脱离业务
程序的最终职责是为了完成业务需求,做好用户体验,不能因为优化去改变需求。
- 长期坚持
性能优化是一件长期的事情,面对数据增长,需求堆叠会带来新的新能瓶颈,需要做好持久战的准备。
- 选择合适的衡量标准
上一节说道评判性能的一些指标,我们在发现性能问题时要选择合适的衡量指标,优化前后进行对比,也需要检测其它指标,防止优化后带来新的性能问题。
性能优化的时机
- 需求提出阶段
在需求分析阶段,要做好思考,分析需求的合理性,找到更好的解决方案
- 设计阶段
在做架构设计,技术选型,接口设计,数据库设计的时候,在设计上做好工作,避免出现瓶颈无法优化,需要推到重来。
- 实现阶段
编码的时候,使用更优的算法,更适合的设计模式来优化代码。
- 维护阶段
随着数据的不断增多,慢SQL逐渐显现出来,还有一些接口速度过慢等等,需要我们去积极解决这些性能问题。
性能优化的方法
- 借助缓存优化
因为数据库一直都是应用的最大瓶颈,所以善于使用缓存也是重要的优化手段,这就是最典型的以空间换时间的思想。
- 使用并行处理优化
并行处理,也就是我们的多线程处理,将串行的执行,变为并行,能够更好的利用多核cpu的优势。
- 使用批量处理优化
使用批量处理往往更能节约资源,提高处理速度,尤其体现在网络IO、磁盘IO.
- 使用惰性加载优化
惰性加载,也就是懒加载,在需要使用的时候我们才会去创建实例。
- 缩小解空间
即缩小解题空间,就像数据库建立索引,通过索引,让我们不必去大海捞针,能够极大的提高响应速度。
- 提升代码质量
更简洁、规范的代码,不但便于维护,更能体现出高性能。