Netty ByteBuf占用了所有内存

时间:2014-09-25 22:29:44

标签: java netty bytebuffer

我写了一个简单的代码来测试我的服务器性能

        while (true) {
            ByteBuf firstMessage = Unpooled.buffer(8);
            firstMessage.writeInt(1);
            firstMessage.writeInt(1);
            firstMessage.writeLong(1L);
            f.channel().writeAndFlush(firstMessage);
        }

30秒后:

  • 所有内存占用
  • 服务器停止接收新消息

抱歉我的英文

3 个答案:

答案 0 :(得分:0)

可能你在一个通道上创建新的缓冲区(在堆上)比在网络上发送它们更快,所以最终它们会占用整个堆,你会遇到OOM问题。

答案 1 :(得分:0)

我认为你最好在刷新完成后尝试调用firstMessage.release()。在ByteBuf规范中,显示ByteBuffer正在实施ReferenceCounted

答案 2 :(得分:0)

您无需继续重新创建缓冲区。要么在循环中释放它,要么在循环开始之前创建它,然后在循环内重置它。