JDK_SocketInputStream.socketRead0阻塞问题

1.问题发现(定时任务中发现jedis的rpop方法,会使线程长时间挂起)

jstack展示的堆栈信息
jstack展示的堆栈信息
查阅发现一个jdk的问题
SocketInputStream.socketRead0 can hang even with soTimeout set
Bug Database_socketRead0

2.官方在16年以做出修改

在这里插入图片描述

3.comments

The customer tested with the attached native tests. Both the poll (which mimics the JDK’s behaviour) and the socket timeout option (which does not) reproduced the issue. The underlying cause appears to be related to the customers infrastructure, and not a JDK problem.

客户使用附带的本机测试进行了测试。轮询(模仿JDK的行为)和套接字超时选项(没有)都再现了这个问题。根本原因似乎与客户的基础架构有关,而不是JDK问题。

4.说是客户端问题,检查jedis版本

检查发现jedis版本仍然是2.5.2,最新已经是4.0.1了,遂做版本更新,并重新放回执行定时任务,做长期观测。

5.问题梳理

#1.jdk的SocketInputStream.socketRead0方法导致线程长期挂起,官方修复;
#2.由于socker是通信基础,客户端在对此开发时可能未对上述问题做处理,历史影响;
#3.许多基于socket开发的客户端,如jedis,旧的版本会出现,期待新版本对此问题做出修复;
#4.代码测试、长期观测;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值