tomcat cpu暴涨100% 解析

背景:线上项目 框架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,出现问题再开启检测。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,407评论 25 708
  • 转 # https://www.cnblogs.com/easypass/archive/2010/12/ 08/...
    吕品㗊阅读 9,801评论 0 44
  • 那是长满了绿萝的一道墙,绿萝茎叶饱满肥大,绿的发亮!绿萝四处蔓延生长着,向着墙的最高处,向着白茫茫的远方,无边际,...
    余大Eudora阅读 155评论 0 4
  • 我是在十八日早晨,才知道洛阳河南林业职业学院一18岁大一男生因为女友劈腿失恋,从男生宿舍6楼跳下自杀的事,又一...
    关念阅读 774评论 1 3
  • 《坚韧,是一朵盛放在晚年的梅花》 有句客家话说“老年成细”,意思是老人像孩子,有时候需要陪伴,有时候像小...
    幽幽草阅读 289评论 0 0