工作纪实39-排查CPU飙高(业务慢查询)

前两天刚处理了死循环的cpu飙高(持续缓慢增高),这两天又遇到了另一个cpu偶发飙高场景

现象:发现cpu偶发性飙高,动不动就100%+的使用率,关键问题是一会儿就又下去了,非常不好分析定位!
工作纪实39-排查CPU飙高(业务慢查询)_第1张图片
排查思路:单一的按照死循环去看线程,是看不出来的,因为飙高线程id一直在交替变化;所以得转换一下思路,具体问题具体分析;

根据图片可以看到这个现象:
1.半夜也有部分cpu飙高情况
2.白天频繁飙高
3.cpu线程数没有明显增加(可能是部分业务查询慢,导致cpu飙高)

猜测一:
定时job(因为半夜也有)

验证猜测一:
通过排查日志和数据量,发现这种假设不存在(失败,半夜确实有用户使用我们的app,也是醉了)

猜测二:
部分sql慢查询导致

验证猜测二:
上数据库监控平台发现有一批慢sql,直接申请索引处理,发现没有太大变化(失败)

猜测三:
某一段时间的查询激增导致,而这些查询不算慢也不算快,但是量很大

验证猜测三:
统计了2分钟内的cpu高峰日志,和cpu低峰日志,进行接口调用数对比排查;(没有明显差异)

猜测四:
目前来看,只有猜测三是合理的,继续对猜测3的接口调用时间进行统计;(发现了问题)
工作纪实39-排查CPU飙高(业务慢查询)_第2张图片
发现某一个接口的耗时情况是上图的样子(导出日志写程序统计耗时);
剩下的就是代码分析了,发现有for循环的查库操作,做优化后,cpu使用率明显下降(其实还有一些偶发达到70~90%的情况,但是100%的基本上没了,就看后面跟随业务缝缝补补了);

你可能感兴趣的:(工作纪实,java)