2017-09-20 52 views
0

我已經創建了一些遊戲服務器,並且我只用大約10個配對進行了測試。一切都很順利,我們玩了大約10分鐘,並且在遊戲的某個時候,遊戲服務器停止爲客戶端提供服務,斷開所有人連接,並且我的連接到運行遊戲的VPS的SSH也斷開連接(我不確定爲什麼),但在斷開連接之前,我總是得到這個消息:嚴重:泄漏:ByteBuf.release()在垃圾收集之前未被調用。 Netty

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()因爲那會不會真的處理任何數據包,只是一種錯誤的行爲,我敢肯定,這是錯誤的把它放在那裏。

回答

2

當你的Packet持有創建一個新的參考ByteBuf你需要確保你調用這個ByteBufByteBuf.release()否則你創建一個內存泄漏。