代码改变世界

SpringCloud Gateway堆外内存溢出排查 - 详解

2026-01-02 09:19  tlnshuju  阅读(2)  评论(0)    收藏  举报

生产环境网关模块偶发的 OutOfDirectMemoryError 错误排查

io.netty.util.internal.outofDirectMemoryError: failed to allocate 16777216 byte(s) of direct memory (ued: 469762055, max: 477626368)

SpringCloudGateway 是基于 WebFlux 框架构建的,而 WebFlux 框架底层则应用了高性能的 Reactor 模式通信框架 Netty。

网上查阅相关资料,有些场景是因为堆外内存没有手动 release 导致

应该加上代码

DataBufferUtils.release(dataBuffer);

测试环境可能通过加上-XX:MaxDirectMemorySize=1m 来模拟重现。

测试多次请求,不加DataBufferUtils.release(dataBuffer)的情况下,bug复现

而加了DataBufferUtils.release(dataBuffer)的情况下,bug不再出现。