定时任务失效的排查

最近遇到一个线上问题,记录一下

前景:项目中用的很多定时任务,使用的是spring自带的定时任务,项目刚开始上线的时候,定时任务确实可以正常运行,但是某一天发现,项目没有数据了,推测可能是由于定时任务没有执行,于是查看日志,发现两天前所有的定时任务全部停止了

排查思路1:可能是某个任务抛出异常导致的,于是本地测,发现抛异常并不会导致所有定时任务全部停止

排查思路2:spring的定时器是单线程的,能不能给他改成多线程呢。

排查思路3:既然spring自带的定时任务是单线程的,可以使用arthas,查看线程状态

先找到日志中的定时任务线程名称

 然后使用arthas找到指定的线程,查看线程状态

 于是继续查看这个线程的具体状态

 根据自己的推测,继续查看日志

 发现在这次之后确实没有响应,说明这个线程就在一直等这个响应

然后查看代码,发现在请求的时候没有设置超时时间,导致我们的线程一直等待第三方的响应,于是加上超时时间的配置

 解决!!

一开始有想过,spring的定时任务确实是单线程的,能不能给他改成多线程的,问题解决之后再回顾这个方法, 也存在问题,就算改成多线程的,一个线程等待会重启另外一个线程,要是第三方服务经常不稳定,就会导致很多线程都处于空等状态,就会导致系统性能急剧下降,所以遇到问题应先排查最根本的问题,不能想当然,找到病因,对症下药,才有奇效!

 

 

 

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值