Netty是如何解决JDK中的Selector的bug的?

Selector BUG: JDK NIO的BUG,

例如臭名昭著的epoll bug,它会导致Selector空轮询,最终导致CPU 100%,

官方声称在JDK 1.6版本的update18修复了该问题,但是直到JDK1.7版本该问题仍旧存在,只不过该BUG发生

概率降低了一些而已,它并没有被根本解决,甚至JDK1.8的131版本中仍然存在

这个问题的具体原因是:

在部分Linux的2.6的Kernel中。poll和epoll对于突然中断的连接socket会对返回的eventSet

事件集合置为POLLHUP或POLLERR,eventSet事件集合发生了变化,这就可能导致Selector会被唤醒。但是这个时候selector的select方法返回numKeys是0,所以下面本应该对key值进行遍历的事情处理根本执行不了,又回到最上面的while(true)循环,循环往复,不断的轮询,直到Linux系统出现100%的CPU情况,最终导致程序崩溃

Netty解决办法

对Selector的select操作周期进行统计,每完成一次空的select操作进行一次技术,若在某个周期内连续发生N次空轮询,则触发了epoll死循环bug.重建Selector,判断是否是其他线程发起的重建请求,若不是则将原SocketChannel从旧的Selector上去除注册,重新注册到新的Selector上,并将原来的Selector关闭,NioEventLoop的select方法中

相关推荐
吴声子夜歌6 分钟前
Guava——事件总线
java·网络·guava
en.en..10 分钟前
Ubuntu嵌入式开发 export环境变量
java·开发语言·数据库
gf132111111 分钟前
【python_回复邮件】
android·java·python
攻城有术16 分钟前
专项攻克——重写 Redis 依赖包方法的 6 种实现方式
java·数据库·redis·bootstrap
跨境数据猎手24 分钟前
京东开放平台商品详情接口(jd.item_get):签名、缓存与批量采集
java·spring·缓存
比兔代理29 分钟前
住宅代理IP的出口节点调度:ASN、BGP 与 IP 段信誉机制解析
linux·服务器·网络
AAA代码批发商30 分钟前
DAYS 38 TCP并发服务器模型详解
linux·网络·笔记·学习
Quanqiucard34 分钟前
监控球机联网总掉线?问题可能出在物联网卡上!
网络·物联网
三84443 分钟前
应急响应之服务、文件痕迹、网络、日志排查 + 工具清单
网络·应急响应·日志排查·文件痕迹排查·应急响应报告模板·服务排查
晏宁科技YaningAI1 小时前
企业通信系统技术规划方法:从业务需求到可演进架构
网络·性能优化·架构·gateway·paas