언리얼 엔진에 내장된 Malloc Profiler를 통해 메모리 프로필 정보를 생성합니다. 이후 내보낸 프로필을 Memory Profiler2 프로그램을 통해 분석함으로써 메모리 누수 및 관련 문제를 찾는데 사용 합니다.
Memory Profiler2의 실행 파일은 \Engine\Programs\MemoryProfiler2\Binaries\MemoryProfiler2 에서 확인하실 수 있습니다.
주의사항
Profile을 생성하기 위해서는 프로젝트를 리빌드해야 할 수 있기 때문에 다소 시간이 소요됩니다. 또한 캡쳐 중 메모리가 고갈되기 때문에 장기간 캡처는 자제해야 합니다. (무조건 15분에 2GB 정도를 소모합니다.)
만약, 장기간 캡쳐가 필요한 경우 Memory Insight를 사용해 메모리 사용 추세를 관찰하는 것도 괜찮습니다.
Memory Profiler로 할 수 있는 일
Callgraph 보기
메모리가 할당 될 때까지 경로의 계층을 표현합니다. Topdown 방식으로 메모리 할당 개요를 볼 수 있습니다.
패키지된 게임에 표시되지 않는 경우 Project Settings에서 미리 Include Debug Files를 사용하도록 설정해야 합니다.
익스클루시브 뷰
메모리 누수를 탐색하기에는 Exclusive View가 가장 유용합니다. 기본적으로 프로젝트 시작 이후에 실행된 모든 메모리 할당이 표시되며, 크기가 큰 할당 내역을 찾는데 효과적입니다.
타임라인 확인
Timeline View는 시간이 지남에 따라 Memory Allocation에 대한 개요를 제공함으로, 메모리 할당 추세를 확인할 수 있습니다. (앞서 말했듯 해당 기능은 Memory Insight가 보다 효과적일 수 있습니다.)
히스토그램
막대 축 그래프로 통계 데이터를 표시합니다. 메모리 점유율을 시인하기 쉽기 때문에, 무엇에 메모리를 많이 사용하고 있는지 확인하는데 용이합니다.
메모리 맵
Memory Map을 표시합니다. 메모리를 효율적으로 사용할 여지가 있는지 확인할 수 있습니다.
상세보기
Point-To-POint에서 메모리의 증감을 확인할 수 있습니다. Start/Stop은 프로파일링된 두 점을 상단 Diff Start/Diff End에서 조정할 수 있습니다. Diff는 그 차이 정보를 나타내고, 현상했을 경우는 마이너스 값으로 표시합니다.
준비
프로필을 생성하기 전에 미리 준비해야 할 것은 아래와 같습니다. ① Memory Profiler2의 기동 확인 ② Malloc Profile의 활성화 ③ 디버그 파일을 패키지에 포함시킨다 ④ 패키지의 작성
Memory Profiler2 시작 확인
Memory Profiler2의 실행파일이 존재하는지 확인이 필요합니다. Engine/Programs/MemoryProfiler2/Binaries 에 실행파일이 없다면, Engine/Source/Programs/MemoryProfiler2/MemoryProfiler2.sln을 비주얼스튜디오를 통해 빌드해야 합니다. (4.27 기준 커스텀 엔진 인스톨 빌드 후에는 모두 존재합니다.)
Project Settings으 Include Debug Files를 사용으로 설정합니다. 여기에서 활성화하지 않으면 검색된 프로필을 도구로 열어도 콜 트리에 함수정보(심볼 정보)가 표시되지 않습니다.
패키지 만들기
게임 빌드를 완료 후 패키지로 만들면 프로필 준비가 완료됩니다. (BuildConfiguration으로 MallocProfiler를 활성화한 경우엔 추가적인 작업이 필요합니다.)
프로필
프로파일링은 어플이 시작하자마자 시작됩니다. 그리고 어플이 종료되면 프로파일링도 종료됩니다.
기본 프로필의 시작과 끝은 이 두가지 입니다. 프로파일을 종료하면 [Game]/Saved/Profiling에 프로파일(.mprof 파일)이 내보내집니다.
'프로파일링 시작'은MallocProfiler가 생성된 타이밍만 존재하므로 한 번만 시작할 수 있습니다.즉,한번 프로파일을 정지해 버리면 재개할 수 없다고하는 것으로.프로파일링 종료는 애플리케이션 종료 외에 콘솔 명령으로 특정 시점에서 중지할 수 있습니다.이 외에도 레벨 전환 시 또는 콘솔 명령에서 프로파일의 중간 지점을 표시할 수 있습니다.
명령 | 기능
Mprof 시작
프로파일 시작을 위한 명령(효과 없음)
Mprof 중지
프로파일 종료 명령 (한 번 종료하면 다시 시작할 수 없음)
마크 [MARK_NAME] 교수
프로필의 중간 지점을 기록합니다.
DumpAllocStoFile
Mprof Stop과 동일
스냅샷메모리
Mprof Mark과 동일
프로파일 분석
프로파일 데이터를 얻은 후 프로파일러로 구문 분석을 수해앟면 됩니다. 다음은 Memory Profiler2의 분석에 대하여 설명합니다.
Memory Profiler2 로딩 및 분석
Memory Profiler2에서 저장된 .mprof 파일으 엽니다. 이 작업은 다소 시간이 소요될 수 있습니다.
프로파일 데이터를 로드해도 즉시 반영되지 않으며, 각 탭으로 이동 후 화면 오른쪽 상단에 있는 'GO' 버튼을 누르면 반영됩니다. 특정 메모리 누수를 찾으려면 Diff Start와 Diff End 를 조정하여 프로파일링된 기간을 조정합니다.
여기에서 런타임에 추가한 마커를 선택할 수도 있습니다. 혹은 특정의 이벤트시(맵 이동, GC 수행 등)에 자동적으로 생성된 Marker를 선택하는 것도 가능합니다.
메모리 누출 분석
예를 들어 아래와 같이 메모리가 증가하고 있는 경우, 어디에서 무엇이 추가되었는지를 추적합니다.이것은 애플리케이션 시작부터 ThirdPersonTemplate의 Map이 시작될 때까지의 추적 기록이기 때문에 당연히 레벨이 생성되었을 때 추가된 메모리가 추가됩니다.Details View의 Diff를 보면 얼마나 많은 메모리가 증가했는지 확인할 수 있습니다.Diff는 응용 프로그램 시작시의 차이이므로 당연히 추가 된 분이 Diff에 기록됩니다.Execulsive View를 보면 어떤 메모리가 어디에 추가되었는지 확인할 수 있습니다.이와 같이, 얻어진 결과가 상정된 것인지, 부주의하게 늘어나지 않았는지 등을 확인해, 유출하고 있는 개소를 특정합니다.