知识卡片

Netty绕过Epoll空轮询Bug的方法

专业/工作 · 1310

内容

JDK NIO的Epoll有已知缺陷:某些条件下select()会立即返回而不阻塞,即使无IO事件就绪,导致线程空轮询、CPU占满。Netty未修复该JDK级Bug,而是绕开:select前后记录耗时,若阻塞时间短于预期就记一次异常,异常连续超阈值(默认512次)判定Selector已坏,创建新Selector迁移Channel后丢旧的。发散:用异常特征检测重建资源,绕过无法直接修复的第三方缺陷,呼应[[Netty对原生NIO的封装价值]]里提到的Epoll空轮询问题。

参考来源

《跟闪电侠学Netty:Netty即时聊天实战与底层原理》第22章《Reactor线程模型解析》