微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

错误14416 --- [ctor-http-nio-3] io.netty.util.ResourceLeakDetector:泄漏:在垃圾回收之前未调用ByteBuf.release

如何解决错误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等性能相关的所有问题……?

环境信息:

  1. 春季靴子:2.1.5。发布
  2. Spring Cloud:格林威治。发布
  3. Java:8

有人可以建议我吗?这是正确的方法

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。