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缓存;