严重:泄漏:在垃圾收集之前未调用 ByteBuf.release()。内蒂

2024-01-19

我已经创建了一些游戏服务器,并且刚刚与大约 10 个伙伴进行了测试。一切都很顺利,我们玩了大约 10 分钟,在游戏的某个时刻,游戏服务器停止为客户端提供服务,断开了每个人的连接,而且我连接到运行游戏的 VPS 的 SSH 也断开了连接(我不知道为什么)但在断开连接之前我总是收到此消息:

Sep 20, 2017 5:14:11 PM io.netty.util.ResourceLeakDetector reportUntracedLeak
SEVERE: LEAK: ByteBuf.release() was not called before it's garbage-collected. Enable advanced leak reporting to find out where the leak occurred. To enable advanced leak reporting, specify the JVM option '-Dio.netty.leakDetection.level=advanced' or call ResourceLeakDetector.setLevel() See http://netty.io/wiki/reference-counted-objects.html for more information.

我需要调试并知道这个消息的真正含义是什么,这个错误的方向是什么。

我真的不知道我的代码的哪一部分需要弄清楚。

private void decodeData(ChannelHandlerContext ctx, ByteBuf buffer, List<Object> out) {
    if (buffer.readableBytes() >= length) {
        ByteBuf data = buffer.readBytes(length);
        out.add(new Packet(opcode, data));
        setState(PacketDecodeState.OPCODE);
    }
}

读取完数据后,我不调用buffer.release()因为这样它就不会真正处理任何数据包,只是一个错误的行为,我确信把它放在那里是错误的。


As your Packet保存对新创建的引用ByteBuf你需要确保你打电话ByteBuf.release()这个的ByteBuf否则会造成内存泄漏。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

严重:泄漏:在垃圾收集之前未调用 ByteBuf.release()。内蒂 的相关文章