如何解决错误14416 --- [ctor-http-nio-3] io.netty.util.ResourceLeakDetector:泄漏:在垃圾回收之前未调用ByteBuf.release
在我的应用程序中,我遇到了Netty内存泄漏问题。下面是我正在使用的网络路由代码。
Flux<HttpClientResponse> responseFlux = this.httpClient.chunkedTransfer(chunkedTransfer).request(method).uri(url).send((req,nettyOutbound) -> {
req.headers(httpHeaders);
if (preserveHost) {
String host = request.getHeaders().getFirst(HttpHeaders.HOST);
req.header(HttpHeaders.HOST,host);
}
return nettyOutbound.options(NettyPipeline.SendOptions::flushOnEach)
.send(request.getBody().map(dataBuffer -> ((NettyDataBuffer) dataBuffer).getNativeBuffer()));
})
当我运行应用程序时。我收到低于净值泄漏错误的消息。
ERROR 14416 --- [ctor-http-nio-3] io.netty.util.ResourceLeakDetector : LEAK: ByteBuf.release() was not called before it's garbage-collected. See http://netty.io/wiki/reference-counted-objects.html for more information.
我尝试使用以下代码释放ByteBuf.release()
Flux<HttpClientResponse> responseFlux = this.httpClient.chunkedTransfer(chunkedTransfer).request(method).uri(url).send((req,host);
}
return nettyOutbound.options(NettyPipeline.SendOptions::flushOnEach)
.send(request.getBody().map(dataBuffer -> {
try{
return ((NettyDataBuffer) dataBuffer).getNativeBuffer();
}
finally {
DataBufferUtils.release(dataBuffer);
}
}));
})
我收到以下错误消息。
io.netty.handler.codec.EncoderException: io.netty.util.IllegalReferenceCountException: refCnt: 0,decrement: 1
我尝试在我的应用程序中的Netty环境变量下面添加该变量。
-dio.netty.nopreferDirect=true -dio.netty.allocator.type=unpooled
在这种情况下,我没有遇到任何内存泄漏问题。但是这种变化将影响更高环境中与UAT和PROD等性能相关的所有问题……?
环境信息:
- 春季靴子:2.1.5。发布
- Spring Cloud:格林威治。发布
- Java:8
有人可以建议我吗?这是正确的方法
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。