Unreal Engine으로 메모리 사용량 확인

프로세스의 메모리 압력을 나타내는 '익명 RSS + 스왑' 은 게임 안정성을 유지하는 데 중요한 측정항목입니다. 이 측정항목은 **메모리 제한기** (Android 17 이상)의 메모리 한도 임계값과 Google Play Console의 메모리 Vitals의 표준 벤치마크 역할을 합니다.

런타임 시 또는 Unreal Engine 내에서 정적으로 '익명 RSS + 스왑'과 정확히 일치하는 메모리 사용량을 측정하기는 어렵습니다.

메모리 사용량을 추적하기 위해 Unreal Engine은 VmRSS + VmSwap 측정항목을 제공합니다. VmRSSrssFilerssShmem이 포함되어 있으므로 '익명 RSS + 스왑'보다 광범위하지만 여전히 신뢰할 수 있는 추정치 역할을 합니다.

이 안내에 따라 게임의 메모리 사용량을 분석하세요.

C++ API를 사용하여 메모리 쿼리

다음 C++ API를 사용하여 메모리 측정항목을 쿼리합니다.

경량 메모리 쿼리

경량 메모리 쿼리에는 GetMemoryUsedFast를 사용합니다. Android에서 이 메서드는 전체 파일을 읽는 대신 /proc/self/status에서 필요한 메모리 필드만 파싱하여 추정된 공간을 반환합니다.

세부 메모리 통계

GetStats를 사용하여 세부 플랫폼 메모리 통계를 쿼리합니다. 이 메서드는 포괄적인 플랫폼 메모리 통계를 제공하며 FPlatformMemoryStats.UsedPhysicalFPlatformMemoryStats.RssFile을 모두 반환합니다. UsedPhysicalVmRSSVmSwap의 합이므로 여기에서 RssFile을 빼면 벤치마크 값에 더 가까워질 수 있습니다.

#include "HAL/PlatformMemory.h"

uint64 GetEstimatedPhysicalMemory()
{
  FPlatformMemoryStats Stats = FPlatformMemory::GetStats();

#if PLATFORM_ANDROID
    return Stats.UsedPhysical - Stats.RssFile;
#else
    return Stats.UsedPhysical;
#endif
}

콘솔 명령어를 사용하여 메모리 모니터링

이 접근 방식을 사용하여 게임이 기기에서 실행되는 동안 메모리 트렌드를 모니터링합니다. 콘솔을 열려면 화면을 네 손가락으로 탭한 다음 다음 명령어를 입력합니다.

명령어 설명
stat unit 모든 프레임에서 업데이트되는 Mem 행에 현재 집계된 실제 메모리 사용량을 표시합니다.
stat unitmax Mem 행에 평균 및 세션 최고 집계 실제 및 가상 메모리 사용량을 표시합니다.

Mem 행을 보여주는 Unreal Engine 통계 단위 오버레이
그림 1. stat unit 오버레이 에서 Mem 행을 표시합니다.

Unreal Insights로 메모리 시각화

Unreal Insights를 사용하면 프레임 정확한 타임라인 그래프를 사용하여 플랫폼 메모리 통계 및 맞춤 카운터와 같은 메모리 측정항목을 시간 경과에 따라 모니터링하고 시각화할 수 있습니다.

  1. default,counters를 포함하는 플래그를 사용하여 기기를 메모리 트레이스 채널에 연결하여 프레임 타임라인과 함께 PlatformMemory/UsedPhysical(VmRSS + VmSwap) 그래프를 확인합니다.
  2. 선택사항: 맞춤 메모리 측정항목을 더 자세히 추적하려면 TRACE_DECLARE_MEMORY_COUNTERTRACE_COUNTER_SET을 사용하여 맞춤 트레이스 카운터를 선언하고 업데이트합니다.
#include "ProfilingDebugging/CountersTrace.h"

TRACE_DECLARE_MEMORY_COUNTER(Trace_EstimatedPhysicalMemory, TEXT("Memory/EstimatedPhysicalMemory"));

void UpdateMemoryTraceCounter()
{
    // Note: Ensure GetEstimatedPhysicalMemory() is defined as shown
    // in the Query memory at runtime using C++ APIs section.
    TRACE_COUNTER_SET(Trace_EstimatedPhysicalMemory, GetEstimatedPhysicalMemory());
}

메모리/EstimatedPhysicalMemory를 보여주는 Unreal Insights
그림 2. 맞춤 Memory/EstimatedPhysicalMemory 카운터를 보여주는 Unreal Insights 타임라인

Perfetto를 사용하여 정확한 메모리 사용량 확인

추정치가 아닌 정확한 Android OS '익명 RSS + 스왑' 값을 확인하려면 Perfetto를 사용하세요. Perfetto는 시스템 수준 메모리 측정항목을 캡처하여 게임의 정확한 공간을 평가합니다.

익명 RSS, 스왑, 합계 쿼리를 보여주는 Perfetto UI
그림 3. 익명 RSS, 스왑, 합계 쿼리를 보여주는 Perfetto UI