我是靠谱客的博主 友好香水,最近开发中收集的这篇文章主要介绍quartz卡死,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

这两天遇到个quartz定时任务卡死的问题,记录如下。

客户端用quartz 写了几个定时任务(HttpURLConnection),去定时 从服务器 同步消息。但运维的兄弟说,重启了服务器,有两个定时任务死了。

查看日志,发现8这一个线程,确实卡死了。其他的则报了请求失败的异常。


我打开intellij调试,发现无论我如何停止服务,重启服务器后, 客户端都能自动连上。刚开始 我怀疑是HttpURLConnection没有写超时返回,导致的。

从服务器里面,写了个sleep,发现确实不会断线重连,导致卡死。

但想不明白,为什么我这里不能重现。再有如果卡死的话,应该是所有的定时任务都卡死,为什么有的没卡死呢?

后来通过仔细询问,发现运维的重启方式是关机重启,而不是去服务里面重启。仿真了一下,确实卡死了。接下来的的问题,就好分析了。

卡死确实发生在了,HttpURLConnection这。至于为什么有的卡死,有的没卡死,则是因为,卡死的任务,时间间隔短(卡死概率大),未卡死的时间间隔长(卡死概率小)。

HttpURLConnection有两个超时,一个是连接超时,一个是读数据超时。当重启的时候,如果任务已经连接上了,但是读数据时,服务器断开了,就会导致Quartz死等。

如果电脑完全关闭后,客户端的定时任务再触发,就会因为无法连通 包HTTP请求失败,不会导致卡死。

手动设置超时时间,问题解决。

HttpURLConnection urlCon = (HttpURLConnection)url.openConnection();
urlCon.setConnectTimeout(30000);
urlCon.setReadTimeout(30000);

最后

以上就是友好香水为你收集整理的quartz卡死的全部内容,希望文章能够帮你解决quartz卡死所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(45)

评论列表共有 0 条评论

立即
投稿
返回
顶部