两次项目CPU过高的原因其实都与代码中for循环计算的次数太多有关
1 定时任务全表扫描两层for循环
图1
如上图所示,原来的表由只存实时数据改为存历史数据,这里代码中查询表没有加限制条件导致全量查询表中数据,这里两层for循环还加计算判断,运行这个方法时服务器CPU瞬间飙升
2 for循环次数太多CPU慢慢升高
图2
原来的代码中使用迭代器,在代码中两层循环,每个循环上千次,一个文件解析需要循环上百万次,这里改为JDK8的stream 流操作进行一层循环,里面直接判断在另一个json中是否存在相同的key,减少循环的次数
图3
这个和上面不太一样的是它不是CPU瞬间飙升,观察一段时间CPU占用一直很低,但是几个小时后CPU变的很高,这种情况CPU是慢慢的升高,这种情况分析代码排查要久一些