堆明明没满,容器却被 OOMKilled:一个 ByteBuf 忘了 release 的堆外内存漏洞
消息推送网关的堆使用率一直只有 40%,容器 RSS 却每天涨一截,最后被 OOMKilled,日志里还偶发 Direct buffer memory。用 NMT、Netty 泄漏检测 PARANOID 找到忘记 release 的 ByteBuf,并给堆外内存加上限。
从一个关键词,发现新的思路。
消息推送网关的堆使用率一直只有 40%,容器 RSS 却每天涨一截,最后被 OOMKilled,日志里还偶发 Direct buffer memory。用 NMT、Netty 泄漏检测 PARANOID 找到忘记 release 的 ByteBuf,并给堆外内存加上限。
Netty 的核心组件与 Reactor 线程模型讲透,包含拆包粘包的四种解法、编解码器选型、心跳保活、ByteBuf 引用计数,以及生产上 DIRECT_MEMORY 泄漏和 EventLoop 阻塞的真实排查过程。