问题描述
在我的应用程序中,我遇到了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 (将#修改为@)