Memeriksa penggunaan memori dengan Unreal Engine

Mewakili tekanan memori suatu proses, 'RSS anonim + swap' adalah metrik penting untuk mempertahankan stabilitas game. Metrik ini berfungsi sebagai nilai minimum batas memori untuk Pembatas Memori (Android 17 dan yang lebih tinggi) serta tolok ukur standar untuk Vitalitas Memori di Konsol Google Play.

Sulit untuk mengukur penggunaan memori yang persis sama dengan 'RSS anonim + swap' baik saat runtime maupun secara statis dalam Unreal Engine.

Untuk melacak penggunaan memori, Unreal Engine menyediakan VmRSS + VmSwap metrik. Meskipun lebih luas daripada 'RSS anonim + swap' karena VmRSS mencakup rssFile dan rssShmem, metrik ini tetap berfungsi sebagai perkiraan yang andal.

Ikuti panduan ini untuk menganalisis jejak memori game Anda:

Membuat kueri memori menggunakan C++ API

Gunakan C++ API berikut untuk membuat kueri metrik memori:

Kueri memori ringan

Gunakan GetMemoryUsedFast untuk kueri memori ringan. Di Android, metode ini menampilkan perkiraan jejak dengan hanya mengurai kolom memori yang diperlukan dari /proc/self/status, bukan membaca seluruh file.

Statistik memori mendetail

Gunakan GetStats untuk membuat kueri statistik memori platform mendetail. Metode ini menyediakan statistik memori platform yang komprehensif, yang menampilkan FPlatformMemoryStats.UsedPhysical dan FPlatformMemoryStats.RssFile. Karena UsedPhysical adalah jumlah VmRSS dan VmSwap, Anda dapat lebih dekat dengan nilai tolok ukur dengan mengurangkan RssFile darinya.

#include "HAL/PlatformMemory.h"

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

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

Memantau memori menggunakan perintah konsol

Gunakan pendekatan ini untuk memantau tren memori saat game berjalan di perangkat. Untuk membuka konsol, ketuk layar dengan empat jari, lalu masukkan perintah berikut.

Perintah Deskripsi
stat unit Menampilkan penggunaan memori fisik gabungan saat ini di baris Mem, yang diperbarui setiap frame.
stat unitmax Menampilkan penggunaan memori fisik dan virtual gabungan rata-rata dan sesi puncak di baris Mem.

Overlay unit statistik Unreal Engine yang menampilkan baris Mem.
Gambar 1. Overlay stat unit yang menampilkan baris Mem
.

Memvisualisasikan memori dengan Unreal Insights

Unreal Insights memungkinkan Anda memantau dan memvisualisasikan metrik memori, seperti statistik memori platform dan penghitung kustom, dari waktu ke waktu menggunakan grafik linimasa yang akurat.

  1. Hubungkan perangkat Anda ke Saluran Aktivitas Memori dengan flag yang menyertakan default,counters untuk melihat grafik PlatformMemory/UsedPhysical (VmRSS + VmSwap) bersama dengan linimasa frame.
  2. Opsional: Untuk melacak metrik memori kustom secara lebih mendetail, deklarasikan dan perbarui penghitung aktivitas kustom menggunakan TRACE_DECLARE_MEMORY_COUNTER dan TRACE_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());
}

Unreal Insights yang menampilkan Memory/EstimatedPhysicalMemory.
Gambar 2. Linimasa Unreal Insights yang menampilkan penghitung kustom Memory/EstimatedPhysicalMemory.

Memverifikasi penggunaan memori yang akurat menggunakan Perfetto

Untuk memverifikasi nilai 'RSS anonim + swap' Android OS yang tepat, bukan perkiraan, gunakan Perfetto. Perfetto menangkap metrik memori tingkat sistem untuk mengevaluasi jejak game Anda yang tepat.

UI Perfetto yang menampilkan kueri RSS anonim, swap, dan jumlahnya.
Gambar 3. UI Perfetto yang menampilkan RSS anonim, swap, dan kueri jumlahnya.