pdpdds / CGSF

Online Game Server Platform
135 stars 68 forks source link

메모리 누수 관련 질문 드립니다. #30

Closed BornHunter closed 9 years ago

BornHunter commented 9 years ago

간단한 통신 프로그램 만들어 테스트 해보던중 실행중에 메모리 누수가 발견되었습니다. 혹시나 해서 샘플 프로젝트에 있는 EchoServer, ProtocolServer, ChatServer 도 테스트해 보았는데 서버/클라이언트 모두 메모리 증가가 있습니다.(작업관리자에서 확인시) 열심히 찾고 있는데 혹시 의심가시는 부분이 있으신지요? 테스트는 간단한 메시지를 클라이언트에서 루프돌면서 0.1초 간격으로 보내는 식으로 하였습니다.

pdpdds commented 9 years ago

테스트 해봤는데 메모리 누수가 있는 것 같습니다. 주말에 확실하게 확인해 보겠습니다. json 프로토콜 관련 메모리 누수로 일단 추정이 됩니다.

pdpdds commented 9 years ago

확인해 본 결과 CGSF 엔진에서 메모리 누수가 발생하는 것이 아니라 ACE Proactor 에서 유저 세션의 패킷 처리를 위한 메시지 블럭을 할당시 ACE 내부에서 정상적으로 블럭을 해제하지 않아 발생하는 문제로 파악되고 있습니다. 이번에 수정한 처리 코드는 표준 예제로 제공되는 코드에서는 사용되지 않는데 일단 임시로 추가되었으며 제가 뭔가를 놓치고 있는지 확인해 보도록 하겠습니다. //20150322 memory leak fiX 위의 주석으로 수정한 사항을 확인하실 수 있으며 더이상 메모리 증가가 늘어나지 않는 걸 확인하실 수 있을 겁니다. 부하 테스트를 하시는 경우에는 릴리스 모드로 빌드해서 서버를 테스트 하시면 됩니다. 디버그 모드에서는 CPU 부하가 약간의 패킷처리량에도 높은 사용율을 보입니다.

문제점을 알려주셔서 정말 감사드립니다.

BornHunter commented 9 years ago

네 감사합니다. 내일 출근 후 테스트 해봐야겠네요

BornHunter commented 9 years ago

테스트 해봤는데 말씀하신대로 메모리 증가 현상은 없습니다. 감사합니다.

dethjuni-gm commented 9 years ago

테스트 중인 프로젝트에 vld 를 붙여서 테스트 하고 있는데 그동안 메모리릭 보고가 없었습니다. vld에서 감지 못하는 메모리릭인건가요?

pdpdds commented 9 years ago

vld는 프로세스 종료시 출력창에 메모리 릭을 보고하는 모듈인데 프로세스 종료시 ACE가 종료 처리를 수행하면서 해당 부분을 처리했기 때문에 vld에는 보고가 되지 않을 걸로 생각이 됩니다. 이외에 vld로 테스트하면서 출력창에 몇가지 할당 후 해제하지 않은 곳이 몇 곳 보였는데 이부분도 차후 수정하겠습니다.