我已经创建了一些游戏服务器,我只用大约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.
我需要调试并知道这条消息到底意味着什么,这个bug的方向是什么。
我真的不知道我的代码需要用什么来解决它。
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()
,因为它不会真正处理任何数据包,只是一个错误的行为,我确定把它放在那里是错误的。
答案 0 :(得分:2)
由于您的Packet
包含对新创建的ByteBuf
的引用,因此您需要确保调用此ByteBuf.release()
的{{1}},否则会造成内存泄漏。