在通过工具得到异常指标,初步定位瓶颈点后,如何进一步进行确认和调优?在这里提供一些可实践、可借鉴、可参考的性能调优套路,即:如何在众多异常性能指标中,找出最核心的那一个,进而定位性能瓶颈点,最后进行性能调优
以下会按照代码、CPU、内存、网络、磁盘等方向进行组织,针对某一个优化点系统的套路总结,便于思路的迁移实践
一、应用代码相关
遇到性能问题,首先做的是检查否与业务代码相关——不是通过阅读代码解决问题,而是通过日志或代码,排除掉一些与业务代码相关的低级错误
性能优化的最佳位置是应用内部,比如:
- 查看业务日志,检查日志内容里是否有大量的报错产生,应用层、框架层的一些性能问题,大多数都能从日志里找到端倪(日志级别设置不合理,导致线上疯狂打日志)
- 检查代码的主要逻辑,如for循环的不合理使用、NPE、正则表达式、数学计算等常见的一些问题,都可以通过简单地修改代码修复问题
别动辄就把性能优化和缓存、异步化、JVM 调优等名词挂钩,复杂问题可能会有简单解
了解一些基本的代码常用踩坑点,可以加速问题分析思路的过程,从CPU、内存、JVM等分析到的一些瓶颈点优化思路,也有可能在代码这里体现出来
下面是一些高频的,容易造成性能问题的编码要点
-
正则表达式非常消耗CPU(如贪婪模式可能会引起回溯),慎用字符串的split()、replaceAll()等方法,正则表达式一定预编译
-
String.intern()在低版本(Java 1.6 以