Netty:Netty 4.0.14中的非法引用计数异常问题?

Netty:Netty 4.0.14中的非法引用计数异常问题?,netty,Netty,嗨,我对Netty很陌生,因为我最近刚从一位同事那里接管了Netty定制项目。抱歉,如果以前有人问过这个问题(我已经搜索过了)。我们的Netty版本是4.0.14 我对channel.writeAndFlush(response)调用的一小部分不断得到IllegalReferenceCountException 因此,我在Netty中添加了一些调试打印输出,对于相同的writeAndFlush调用,Netty可能会多次释放(ByteBuf)response.content()。这是一个在4.0

嗨,我对Netty很陌生,因为我最近刚从一位同事那里接管了Netty定制项目。抱歉,如果以前有人问过这个问题(我已经搜索过了)。我们的Netty版本是
4.0.14

我对
channel.writeAndFlush(response)调用的一小部分不断得到
IllegalReferenceCountException

因此,我在Netty中添加了一些调试打印输出,对于相同的writeAndFlush调用,Netty可能会多次释放(ByteBuf)response.content()。这是一个在4.0.14之后已经修复的已知问题,还是我用错了?

我的调试输出如下。有四次调用ByteBuf的保留/释放。

发布
(参考CNT 1->0)
,然后是保留
(参考CNT 0->1)
,然后是发布
(1->0)
和发布
(0->-1)

1->0| io.netty.buffer.AbstractReferenceCountedByteBuf.release 142| io.netty.handler.codec.http.DefaultFullHttpResponse.release 79| io.netty.util.ReferenceCountUtil.release 68| io.netty.handler.codec.MessageToMessageEncoder.write 91| io.netty.handler.codec.MessageToMessageCodec.write 116| io.netty.channel.DefaultChannelHandlerContext.invokeWrite 645| io.netty.channel.DefaultChannelHandlerContext.write 699| io.netty.channel.DefaultChannelHandlerContext.write 638| io.netty.handler.timeout.IdleStateHandler.write 265| io.netty.channel.DefaultChannelHandlerContext.invokeWrite 645| io.netty.channel.DefaultChannelHandlerContext.access$2000 29| io.netty.channel.DefaultChannelHandlerContext$WriteTask.run 906| io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks 354| io.netty.channel.nio.NioEventLoop.run 353| io.netty.util.concurrent.SingleThreadEventExecutor$2.run 101| java.lang.Thread.run 745

0->1| io.netty.buffer.AbstractReferenceCountedByteBuf.retain 99| io.netty.buffer.CompositeByteBuf.retain 1570| io.netty.buffer.CompositeByteBuf.retain 40| io.netty.handler.codec.http.HttpObjectEncoder.encodeAndRetain 165| io.netty.handler.codec.http.HttpObjectEncoder.encode 92| io.netty.handler.codec.MessageToMessageEncoder.write 89| io.netty.channel.CombinedChannelDuplexHandler.write 193| io.netty.channel.DefaultChannelHandlerContext.invokeWrite 645| io.netty.channel.DefaultChannelHandlerContext.write 699| io.netty.channel.DefaultChannelHandlerContext.write 638| io.netty.handler.codec.MessageToMessageEncoder.write 115| io.netty.handler.codec.MessageToMessageCodec.write 116| io.netty.channel.DefaultChannelHandlerContext.invokeWrite 645| io.netty.channel.DefaultChannelHandlerContext.write 699| io.netty.channel.DefaultChannelHandlerContext.write 638| io.netty.handler.timeout.IdleStateHandler.write 265| io.netty.channel.DefaultChannelHandlerContext.invokeWrite 645| io.netty.channel.DefaultChannelHandlerContext.access$2000 29| io.netty.channel.DefaultChannelHandlerContext$WriteTask.run 906| io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks 354| io.netty.channel.nio.NioEventLoop.run 353| io.netty.util.concurrent.SingleThreadEventExecutor$2.run 101| java.lang.Thread.run 745

1->0| io.netty.buffer.AbstractReferenceCountedByteBuf.release 142 |io.netty.handler.codec.http.DefaultFullHttpResponse.release 79| io.netty.util.ReferenceCountUtil.release 68| io.netty.handler.codec.MessageToMessageEncoder.write 91| io.netty.channel.CombinedChannelDuplexHandler.write 193| io.netty.channel.DefaultChannelHandlerContext.invokeWrite 645| io.netty.channel.DefaultChannelHandlerContext.write 699| io.netty.channel.DefaultChannelHandlerContext.write 638| io.netty.handler.codec.MessageToMessageEncoder.write 115| io.netty.handler.codec.MessageToMessageCodec.write 116| io.netty.channel.DefaultChannelHandlerContext.invokeWrite 645| io.netty.channel.DefaultChannelHandlerContext.write 699| io.netty.channel.DefaultChannelHandlerContext.write 638| io.netty.handler.timeout.IdleStateHandler.write 265| io.netty.channel.DefaultChannelHandlerContext.invokeWrite 645| io.netty.channel.DefaultChannelHandlerContext.access$2000 29| io.netty.channel.DefaultChannelHandlerContext$WriteTask.run 906| io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks 354| io.netty.channel.nio.NioEventLoop.run 353| io.netty.util.concurrent.SingleThreadEventExecutor$2.run 101| java.lang.Thread.run 745

0->-1| io.netty.buffer.AbstractReferenceCountedByteBuf.release 142 |io.netty.util.ReferenceCountUtil.release 68| io.netty.channel.ChannelOutboundBuffer.safeRelease 509| io.netty.channel.ChannelOutboundBuffer.remove 294| io.netty.channel.ChannelOutboundBuffer.failFlushed 448| io.netty.channel.AbstractChannel$abstractsafe.flush0 684| io.netty.channel.nio.AbstractNioChannel$AbstractNiosafsafe.flush0 271| io.netty.channel.AbstractChannel$abstractsafe.flush 651| io.netty.channel.DefaultChannelPipeline$HeadHandler.flush 1038| io.netty.channel.DefaultChannelHandlerContext.invokeFlush 675| io.netty.channel.DefaultChannelHandlerContext.flush 656| io.netty.channel.ChannelOutboundHandlerAdapter.flush 115| io.netty.channel.CombinedChannelDuplexHandler.flush 198| io.netty.channel.DefaultChannelHandlerContext.invokeFlush 675| io.netty.channel.DefaultChannelHandlerContext.flush 656| io.netty.channel.ChannelDuplexHandler.flush 117| io.netty.channel.DefaultChannelHandlerContext.invokeFlush 675| io.netty.channel.DefaultChannelHandlerContext.flush 656| io.netty.channel.ChannelDuplexHandler.flush 117| io.netty.channel.DefaultChannelHandlerContext.invokeFlush 675| io.netty.channel.DefaultChannelHandlerContext.access$160029| io.netty.channel.DefaultChannelHandlerContext$WriteTask.run 908| io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks 354| io.netty.channel.nio.NioEventLoop.run 353| io.netty.util.concurrent.SingleThreadEventExecutor$2.run 101| 贾弗