Netty ByteBuf 占用所有内存
Posted
技术标签:
【中文标题】Netty ByteBuf 占用所有内存【英文标题】:Netty ByteBuf occupies all memory 【发布时间】:2014-09-25 22:29:43 【问题描述】:我写了一个简单的代码来测试我的服务器的性能
while (true)
ByteBuf firstMessage = Unpooled.buffer(8);
firstMessage.writeInt(1);
firstMessage.writeInt(1);
firstMessage.writeLong(1L);
f.channel().writeAndFlush(firstMessage);
30 秒后:
所有内存占用 服务器停止接收新消息对不起我的英语
【问题讨论】:
【参考方案1】:您创建新缓冲区(堆上)的速度可能比通过网络在单个通道上发送它们的速度要快,因此最终它们会消耗整个堆,并且您会遇到 OOM 问题。
【讨论】:
【参考方案2】:我认为您最好在冲洗完成后尝试致电firstMessage.release()
。在ByteBuf
规范中,表明ByteBuffer
正在实现ReferenceCounted
。
【讨论】:
【参考方案3】:您无需继续重新创建该缓冲区。要么在循环内释放它,要么在循环开始之前创建它,然后在循环内重置它。
【讨论】:
以上是关于Netty ByteBuf 占用所有内存的主要内容,如果未能解决你的问题,请参考以下文章