美文网首页
解决springboot @Scheduled 定时任务 中途退

解决springboot @Scheduled 定时任务 中途退

作者: 背锅填坑交给我 | 来源:发表于2019-10-15 11:15 被阅读0次

0x00 现象

使用@Scheduled注解的一个定时方法,执行了几次之后,就不再执行了,发现最后一次执行只进入了方法,没退出方法(方法开头和结尾都有日志输出)。

方法中包含的操作:
1、http请求
2、redis操作
3、调用带锁的方法
4、调用的方法中有一些会抛出RuntimeException

0x01 定位排查

进入了方法,但是没有退出,说明线程阻塞住了。
jstack 查看一下进程中线程的状态。

jstack 20189 > stack.log

jstack日志的一部分

JedisSentinelPool.getResource,redis从连接池获取连接的时候阻塞了,可能是连接池没有连接了 。

0x02 解决

看了一下代码,在获取到redis连接后没有及时释放资源。

在trycatch后加了
finally {
resource.close();
}

0x03 总结

回想一下,方法中包含的http请求、RuntimeException都有可能造成线程阻塞。

比如http请求超时时间过长,RuntimeException异常退出线程。

所以在写定时任务的时候,要尽量对这些操作善后。

相关文章

网友评论

      本文标题:解决springboot @Scheduled 定时任务 中途退

      本文链接:https://www.haomeiwen.com/subject/cvgjmctx.html