Unreal Engine ile bellek kullanımını kontrol etme

Bir işlemin bellek baskısını temsil eden "anonim RSS + takas", oyun kararlılığını korumak için kritik bir metriktir. Bu değer hem Bellek Sınırlayıcı (Android 17 ve sonraki sürümler) için bellek sınırı eşiği hem de Google Play Console'daki bellek vitals'ı için standart karşılaştırma ölçütü olarak kullanılır.

Bellek kullanımını, çalışma zamanında veya Unreal Engine'de statik olarak "anonim RSS + takas" ile tam olarak eşleşecek şekilde ölçmek zordur.

Unreal Engine, bellek kullanımını izlemek için VmRSS + VmSwap metriğini sağlar. VmRSS, rssFile ve rssShmem'yi içerdiğinden "anonim RSS + takas"tan daha kapsamlı olsa da güvenilir bir tahmin olarak kullanılabilir.

Oyununuzun bellekte kapladığı yeri analiz etmek için aşağıdaki yönergeleri uygulayın:

C++ API'lerini kullanarak belleği sorgulama

Bellek metriklerini sorgulamak için aşağıdaki C++ API'lerini kullanın:

Hafif bellek sorgusu

Hafif bir bellek sorgusu için GetMemoryUsedFast uygulamasını kullanın. Android'de bu yöntem, dosyanın tamamını okumak yerine yalnızca /proc/self/status içindeki gerekli bellek alanlarını ayrıştırarak tahmini ayak izini döndürür.

Ayrıntılı bellek istatistikleri

Ayrıntılı platform bellek istatistiklerini sorgulamak için GetStats kullanın. Bu yöntem, hem FPlatformMemoryStats.UsedPhysical hem de FPlatformMemoryStats.RssFile değerlerini döndürerek kapsamlı platform bellek istatistikleri sağlar. UsedPhysical, VmRSS ve VmSwap değerlerinin toplamı olduğundan RssFile değerini çıkararak karşılaştırma ölçütü değerine daha yakın bir sonuç elde edebilirsiniz.

#include "HAL/PlatformMemory.h"

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

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

Konsol komutlarını kullanarak belleği izleme

Oyun cihazda çalışırken bellek trendlerini izlemek için bu yaklaşımı kullanın. Konsolu açmak için dört parmağınızla ekrana dokunun ve aşağıdaki komutları girin.

Komut Açıklama
stat unit Mem satırında mevcut toplam fiziksel bellek kullanımını gösterir. Bu değer her karede güncellenir.
stat unitmax Mem satırında, ortalama ve oturumun en yüksek noktası olan toplam fiziksel ve sanal bellek kullanımı gösterilir.

Mem satırını gösteren Unreal Engine stat birimi yerleşimi.
Şekil 1. stat unit yer paylaşımı Mem satırını gösterir.

Unreal Insights ile belleği görselleştirme

Unreal Insights, kareye duyarlı zaman çizelgesi grafikleri kullanarak platform bellek istatistikleri ve özel sayaçlar gibi bellek metriklerini zaman içinde izlemenize ve görselleştirmenize olanak tanır.

  1. Cihazınızı, default,counters içeren işaretlere sahip Bellek İzleme Kanalları'na bağlayarak PlatformMemory/UsedPhysical (VmRSS + VmSwap) grafiğini kare zaman çizelgesiyle birlikte görüntüleyin.
  2. İsteğe bağlı: Özel bellek metriklerini daha ayrıntılı olarak izlemek için TRACE_DECLARE_MEMORY_COUNTER ve TRACE_COUNTER_SET kullanarak özel izleme sayacı tanımlayın ve güncelleyin.
#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());
}

Bellek/TahminiFizikselBellek değerlerini gösteren Unreal Insights.
Şekil 2. Özel Memory/EstimatedPhysicalMemory sayacı
gösteren Unreal Insights zaman çizelgesi.

Perfetto'yu kullanarak tam bellek kullanımını doğrulama

Tahmin yerine tam Android OS "anonymous RSS + swap" değerlerini doğrulamak için Perfetto'yu kullanın. Perfetto, oyununuzun tam yer kaplama alanını değerlendirmek için sistem düzeyinde bellek metriklerini yakalar.

Anonim RSS, takas ve bunların toplam sorgusunu gösteren Perfetto kullanıcı arayüzü.
Şekil 3. Anonim RSS, takas ve bunların toplam sorgusunu gösteren Perfetto kullanıcı arayüzü.