错误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 (将#修改为@)