tomcat cpu暴涨100% 解析

2018-03-19  本文已影响0人  莫东

背景:线上项目 框架Springboot ,mybatis ,dubbo

事故:cpu 暴涨100%

线上服务运行稳定超过一个月,之后,突然某一个项目服务器警报cpu暴涨。

开始分析原因,cpu暴涨可能引发的因素,访问量突然飙升,代码出现无限循环导致内存泄露之类,出现慢sql 服务等待时间过长,缓存击穿等

开始排查:

1.查询代理服务器,未发现短时间内访问量暴增,监控qps访问量正常排除访问量,排除

2.代码出现无限循环导致内存无法释放等问题,排查系统日志,logback日志未发现任何错误打出,排除

3.查询数据库慢sql,未发现任何慢sql,排除

4.缓存击穿,查看redis监控,未发现任务异常,排除

经过2天各种排查,未发现任何问题,但是有个规律,一旦重启就会恢复,恢复后1到2小时内又回出现。基本确认是定时器搞的鬼。但是由于定时器分布在各个项目中任何远程调用本项目接口 排查十分困难。

走投无路下,开始研究java监控程序,经过咨询其他同事后建议引入 javamelody尝试。

Springboot 集成javamelody 只需要 pom添加一个依赖包即可操作方便。(此处可使用搜索引擎查看具体实施方法)

javamelody提供了界面展示,查看某一接口耗时占用的百分比。上线后发现某一接口占cpu 80% ,检查该接口为定时器接口。后确认一次性去除大量的数据导致内存沾满 ,gc机制释放,所以重启项目就会恢复,启动1到2小时 定时器再次启动就又发生。

通过对接口的最大调用数量限制重启项目后,未出现此类现象,事故解决。

由于之前各个地方都存有监控,一旦出现问题基本可以定位。此次出现问题各个监控均未发现问题,无奈引入javamelody。 建议正式环境 关闭javamelody,出现问题再开启检测。

上一篇下一篇

猜你喜欢

热点阅读