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

这篇具有很好参考价值的文章主要介绍了Netty是如何解决JDK中的Selector的bug的?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Selector BUG: JDK NIO的BUG,

例如臭名昭著的epoll bug,它会导致Selector空轮询,最终导致CPU 100%,
官方声称在JDK 1.6版本的update18修复了该问题,但是直到JDK1.7版本该问题仍旧存在,只不过该BUG发生
概率降低了一些而已,它并没有被根本解决,甚至JDK1.8的131版本中仍然存在

  • https://bugs.java.com/bugdatabase/view_bug.do?bug_id=6403933
  • https://bugs.java.com/bugdatabase/view_bug.do?bug_id=2147719
  • https://bugs.java.com/bugdatabase/view_bug.do?bug_id=6670302
  • https://bugs.java.com/bugdatabase/view_bug.do?bug_id=6481709
    简单来说,JDK认为Linux的epoll告诉我事件来了,但是JDK没有拿到任何事件(READ、WRITE、CONNECT、ACCEPT),但此时select()方法不再选择阻塞了,而是选择返回了0,于是就会进入一种无限循环,导致CPU 100%.

这个问题的具体原因是:

Netty是如何解决JDK中的Selector的bug的?,Netty,java,bug,Netty,网络

在部分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方法中
Netty是如何解决JDK中的Selector的bug的?,Netty,java,bug,Netty,网络文章来源地址https://www.toymoban.com/news/detail-829330.html

到了这里,关于Netty是如何解决JDK中的Selector的bug的?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Netty实战专栏 | Java网络编程深入解析

    ✅作者简介:大家好,我是Leo,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉 🍎个人主页:Leo的博客 💞当前专栏: Netty实战专栏 ✨特色专栏: MySQL学习 🥭本文内容:Netty实战专栏 | Java网络编程深入解析 🖥️个人小站 :个人博客,欢迎大家访问 📚个人知识

    2024年02月06日
    浏览(41)
  • CentOS 7中,配置了Oracle jdk,但是使用java -version验证时,出现的版本是OpenJDK,如何解决?

    1.首先,检查已安装的jdk版本 2.移除、卸载圈红的系统自带的openjdk 3.配置环境变量并使其生效 1) 编辑/etc/profile 添加如下内容: 2) 使/etc/profile生效 4.查看oracle jdk是否配置成功

    2024年02月14日
    浏览(37)
  • 如何解决 Java 中的 IllegalArgumentException 异常?

    非法参数异常(IllegalArgumentException)的抛出是为了表明一个方法被传递了一个非法参数。该异常扩展了 RuntimeException 类,因此属于在 Java 虚拟机(JVM)运行期间可能抛出的异常。它是一种未检查异常,因此不需要在方法或构造函数的 throws 子句中声明。 当参数超出范围时。例

    2024年02月04日
    浏览(50)
  • 如何解决 Java 中的 IndexOutOfBoundsException 异常

    当我们在 Java 中使用 List 的时候,有时候会出现向 List 中不存在的位置设置新元素的情况,从而导致 IndexOutOfBoundsException 异常。本文将会介绍这个问题的产生原因以及解决方案。 当使用以下代码初始化一个大小为 10 的 ArrayList,并尝试使用 set 方法在第二个位置上设置新的值

    2024年02月13日
    浏览(29)
  • Java 21中的两个值得关注的Bug修复

    在Java 21中,除了推出很多新特性之外,一些Bug修复,也需要注意一下。因为这些改变可能在升级的时候,造成影响。 比如:对于 Double.String(1e23) : 在Java 19后,输出内容为: 1.0E23 在Java 18中,输出内容为: 9.999999999999999E22 欢迎关注,持续更新的Java新特性专栏 IdentityHashMap 是

    2024年02月05日
    浏览(35)
  • 快速入门Java NIO(Not I/O)的网络通信框架--Netty

    了解netty前需要对nio有一定认识,该笔记基础来自bilinbili黑马,在此基础上自己学习的笔记,添加了一些自己的理解 了解java 非阻塞io编程 1.1 Netty 是什么? Netty 是一个异步(基于多线程)的、基于事件驱动(多路复用的那写事件驱动)的网络应用框架,用于快速开发可维护、高性能的

    2024年01月17日
    浏览(38)
  • 长连接Netty服务内存泄漏,看我如何一步步捉“虫”解决

    作者:京东科技 王长春 事情要回顾到双11.11备战前夕,在那个风雨交加的夜晚,一个急促的咚咚报警,惊破了电闪雷鸣的黑夜,将沉浸在梦香,熟睡的我惊醒。 一看手机咚咚报警,不好!有大事发生了!电话马上打给老板: 老板说: 长连接吗? 我说:是的! 老板说:该来的

    2023年04月23日
    浏览(44)
  • 【网安】处理项目中的一些常见漏洞bug(java相关)

    [福利:[ 网络安全重磅福利:入门进阶全套282G学习资源包免费分享 !]](网络安全重磅福利:入门进阶全套282G学习资源包免费分享! ) 1.写在前面 很多时候,一些项目,或许都会有一定的系统安全要求。一般常见于政府项目比较多!!! 项目做完后,都需要做一些安全的扫

    2024年02月13日
    浏览(28)
  • 【netty】java如何作为websocket客户端 对服务端发起请求

    是的 本文介绍java如何作为客户端 发起websocket请求 博主不做标题党 不会服务端客户端分不清就写个标题 乱写文章 为什么会使用java作为websocket客户端? 虽说websocket协议 本意是web与服务端之间的通讯协议,那假设有一天 我们的供应商 或者是甲方大爷 只提供了websocket接口呢?

    2024年02月05日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包