quartz卡死

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

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

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


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

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

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

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

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

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

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值