性能调优
1、怎么优化,根据哪些参数
1.1、影响性能的参考因素:
- CPU、大量计算会长时间的占用CPU资源,代码递归导致无限循环,正则表达式回溯、JVM频繁的Full GC、多线程大量上下文切换。都会导致CPU资源繁忙
- 内存
- 磁盘I/O
- 网络
- 异常:抛出异常需要构建异常栈,对迎春进行捕捉处理这个过程非常消耗系统性能
- 数据库
- 锁竞争
1.2、衡量性能的几个参考因素:
- 响应时间
- 服务端响应时间:包括Nginx分发请求和程序执行时间
- 网络延迟:是网络传输时间
- 客户端时间:对于广大用户来说,这段可以忽略不计,如果客户端嵌入了大量逻辑,消耗时间就就有可能变长了。
- 吞吐量:比较接口的事务处理量(TPS)
- 磁盘吞吐
- 网络吞吐:网卡、光纤、防火墙
- 计算机资源分配率:CPU占比率、内存使用率、磁盘I/O、网络I/O这几个参数需要合理分配
- 负载承受能力
但是在项目开始阶段,没有必要过早的介入性能优化,只需要在编码的时候保证其优秀、高效,以及良好的程序设计
2、如何制定优化策略
测试-分析-调优 三步走
2.1、常见问题
- 热身问题:第一遍程序是需要经过编译,才能执行,随着代码执行次数增多,虚拟机发现某方法和代码特别频繁时,会认定为(Hot Spot Code)热点代码,会将其存储在内存中。
- 测试结果不稳定:多搞两次
- 多 JVM 情况下影响:多个Java程序部署在不同Tomcat下,任意一个JVM拥有整个系统的资源使用权,要避免这种情况做测试
2.2、解决方案
- 优化代码
- 优化设计:单利模式等
- 优化算法:降低时间复杂度
- 时间换空间:String中 intern 方法
- 空间换时间:分库分表
- 参数调优:调整JVM参数
- 兜底策略:保证系统稳定
- 限流,设置最大访问量,采取熔断措施,友好返回失败请求
- 智能化横向扩容,当访问量超过某个阈值,系统根据需求自动新增服务
- 提前扩容,适用于高并发系统(每年双十一淘宝等电商服务)