定时任务堆积问题导致服务异常,日志混乱

张开发
2026/4/15 8:52:52 15 分钟阅读

分享文章

定时任务堆积问题导致服务异常,日志混乱
0.发生2024下半年的时候我们服务中出现了一个问题就是pod总是会在周天早上5点左右自动重启。周一早上来的时候后台服务访问不可用内部服务错误。当时只根据报错原因UnknowHostExceptionXXXXXX.XXX.XX进行处理我们本地有一个配置config还有个公共配置pod手动启动时会自动加载公共配置。这个错误当时怀疑是pod自动重启导致加载到本地配置然后把本地配置和生产配置同步解决1.现象现象定时任务堆积环境uat环境和生产环境都会有这个问题之前的定时任务就是单纯的定时任务没有监控摸黑瞎跑。使用的是注解EnableScheduling最近有需求要将定时任务做监控执行成功后将任务结果更新到数据库开发完成部署生产然后发现部署上去后第一周执行没问题第二周开始发现定时任务全部执行了2次第三周定时任务执行了3次第四周定时任务执行了4次第五周服务挂掉了pod配置自动重启也失效了这。。。。。。2.排查开始排查2.1先看日志日志中比如9.3的日志里的数据是9.4的数据9.4的日志里面是9.5的数据这是一个问题日志还有一个信息就是一个定时任务执行成功一个定时任务执行失败2.2第一次尝试解决看日志初步怀疑是重复初始化servlet导致两个servlet混合写日志做以下处理AtomicBoolean改变完成后部署uat环境还是没解决定时任务依旧执行多次2.3反思为什么会发生任务堆积pod异常关闭导致服务关闭但是定时任务没有被取消。pod自动重启后定时任务又注册了一遍为什么POD会自动重启查看pod的Describe发现pod中有报错OOMKilled/ExitCode:137。是内存泄漏导致pod服务被杀掉没有优雅关闭调用destroy的机会。为什么会内存溢出结合问题出现的时间排查发生过变动的代码。现在怀疑有两个怀疑1定时任务里有一个任务每天2200执行有日志开始报错时间是这个先注释掉再说怀疑2删除数据的接口没有线程池没有超时处理多次调用失败后会卡住一直调用一直卡造成3.解决办法3.1删除接口增加线程池限流增加超时处理3.2注释掉某定时任务定位问题4.总结定时任务最好还是加上监控多看报错信息及时处理5.其他如果定时任务没有执行怎么办什么原因可能是由于上一个定时任务没有执行完成导致默认使用的是单线程需要自己配置下

更多文章