Arthas-CPU持续100%优化
背景
公司测试环境服务器中发现CPU持续在100%,导致程序不能正常响应。测试服务器硬件配置为2核16G单机云服务器。安装了当前公司所有的产品和Mysql数据库。
分析问题
使用Top命令查看
从上图可以看出是由一个java应用和mysql服务占用了几乎大部分CPU资源。
通过监控一段时间的mysql,发现数据库的查询请求压力非常大。
从上图来看,数据库的高峰请求在1200/S左右,5分钟平均下来也在600/S。
基于现在的业务数据量来判断不太合理。
然后打开Arthas的控制面板查看
从上图来看占用的CPU资源确实不少。
然后占用CPU资源多的前几个线程调用堆栈打印出来,对比代码逐步分析。
定位问题
分析代码后逐步判定是代码逻辑不合理,大量采用了Scheduled启动线程,并且并未合理的控制数据范围,导致频繁查询数据,处理数据,造成Java程序和数据库压力都很大。
优化思路
1、按照线程占用CPU情况排序后,逐个分析代码;
2、优化代码逻辑,减少查询数据范围,优化Sql语句,可以用缓存的使用Redis缓存;