背景
部门提供了一个对外接口给组外同事使用,今天早上活动大促通过监控发现,该接口请求量大增,3小时60几万次,非常恐怖,而db又都是平峰,通过调用链发现该redis 一次赋值80多万次非常恐怖,明显一年发现应该是代码问题,通过询问得知的确发了版本,但是只是加了try cath,通过监控显示
es一个方法调了将近90万次
接口一小时调用量
监控图
未找到相关异常
查看是否新的第三方调用发现只有一个使用方
查看每分钟调用次数,吓了一跳一分钟 38380次...
CPU上升了
后面通过负责发过来的代码查看得知..
代码语言:javascript复制@Override
public void updateItemServiceGroupInfo() {
int pageIndex = 0;
while (true) {
pageIndex = pageIndex ;
try {
xxx
} else {
break;
}
} catch (Exception e) {
logger.error("当前页数:{}", pageIndex, e);
break;
}
}
}
pageIndex = pageIndex ; 导致死循环
pageIndex = pageIndex; 正常
比如:pageIndex=1;
pageIndex = pageIndex ; 结果为1
pageIndex = pageIndex; 结果为2
该问题差点引起了线上事故....还好通过监控及时发现...切记切记切记(重要的事情说三遍)
修复好的监控图:
CPU
最后
通过该问题发现,出现该问题差点引发严重后果,无非就两种情况,要么编码未注意到,要么是自测不到位,导致严重的后果,所以工作与生活都一样,处处需要用心。该案例仅供参考,谢谢!