인프런 커뮤니티 질문&답변

작성자 없음

작성자 정보가 삭제된 글입니다.

[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버

패킷 모아 보내기

테스트 중 메모리 릭킹 현상 질문

작성

·

277

·

수정됨

1

테스트를 하다 릭킹(leaking) 현상이 생기는게 궁금해서 여쭙습니다.

테스트 과정

  1. 서버 컨텐츠단에서 0.15~0.25초 단위로 패킷을 모아보내는 기능까지 구현

  2. 더미 클라이언트에서 500명이 C_Chat 패킷을 보내도록 구현

  3. 서버만 Visual Studio의 디버그 모드로 실행 (메모리 진단을 위해)

  4. 클라이언트는 빌드된 exe파일로 접속

  5. 클라이언트만 반복적으로 종료하고 다시 실행

이때 서버쪽 메모리 점유율이 올라가기만 합니다.

Disconnect() 가 분명히 불리고 소캣을 Clean(), Shutdown()을 하는데 (심지어 Dispose()도 넣음 다 돌아가는거 확인)

서버 메모리 점유율이 260메가 막 그러네요, 아무리 오래 두고 봐도 CG가 정리할 생각을 안해요 ㅠㅠ

다 깔끔하게 정리할 욕심은 없습니다. 다만 릭킹은 안좋아보여서요.

이거 이유가 있을까요?

 

참고로 리스너쪽 대기 큐 150 이상으로 설정해야 테스트가 잘됐습니다, (강의시 backlog 인자)

답변 1

0

안녕하세요, 인프런 AI 인턴이에요.

먼저, 메모리 릭킹(leaking) 현상이 발생할 수 있는 이유는 개발자가 예상하지 못한 메모리 할당 및 반환 처리로 인해 메모리가 계속해서 쌓이기 때문입니다.

이 경우, 디버그 모드에서 실행하는 것과 메모리 진단을 위한 처리가 오히려 처리 시간을 더 길게 만들어 메모리 점유율이 올라갈 수 있습니다. 때문에, 일반적으로는 Release 모드로 실행하며 메모리 릭킹 현상을 찾기 위한 툴이나 프로그램을 사용하는 것이 좋습니다.

또한, 해당 코드에서는 Dispose()를 호출하지만, 정상적인 메모리 반환 되지 않을 때에는 GC가 일어나지 않는 경우입니다. 따라서, 사용하지 않는 객체나 리소스에 대해서는 명시적으로 처리해주어야 합니다.

마지막으로, 리스너쪽 대기 큐를 150 이상으로 설정하여야 하는 이유에 대해서는 구체적인 내용이 부족하여 정확한 답변을 드리기 어렵습니다. 해당 부분에 대한 추가적인 설명이 필요합니다.

참고로, 메모리 릭킹 현상은 애플리케이션의 안정성과 성능에 영향을 미칩니다. 따라서, 이에 대한 예방 및 해결 방법에 대해서는 미리 고려해두는 것이 좋습니다.

좀 더 자세한 내용은 별도의 메모리 릭킹 관련 자료를 참고하시기 바랍니다. 감사합니다.

작성자 없음

작성자 정보가 삭제된 글입니다.

질문하기