2017-09-20 10 views
0

게임 서버를 만들었는데 약 10 명의 친구와 테스트했습니다. 모든 것이 순조롭게 진행되었고 게임의 일부 지점에서 게임 서버가 클라이언트 서비스를 중단하고 모든 사람의 연결을 끊었으며 게임을 실행하는 VPS에 연결되어있는 SSH도 연결 해제되었습니다.)하지만 분리하기 전에 항상이 메시지를 얻을 :SEVERE : LEAK : 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()를 호출하지 않습니다. 당신의 Packet으로

답변

2

가 만든 새에 대한 참조를 보유하고 ByteBuf 당신은 당신이 그렇지 않으면 당신은 메모리 누수를 만드는이 ByteBufByteBuf.release() 전화를 확인해야합니다.