【问题标题】:Netty ByteBuf occupies all memoryNetty ByteBuf 占用所有内存
【发布时间】: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 秒后:

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

对不起我的英语

【问题讨论】:

    标签: java netty bytebuffer


    【解决方案1】:

    您创建新缓冲区(堆上)的速度可能比通过网络在单个通道上发送它们的速度要快,因此最终它们会消耗整个堆,并且您会遇到 OOM 问题。

    【讨论】:

      【解决方案2】:

      我认为您最好在冲洗完成后尝试致电firstMessage.release()。在ByteBuf 规范中,表明ByteBuffer 正在实现ReferenceCounted

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-11-05
          • 2013-10-18
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多