Wskaźnik 'anonymous RSS + swap' reprezentujący obciążenie pamięci procesu jest kluczowy dla utrzymania stabilności gry. Służy on zarówno jako próg limitu pamięci dla ogranicznika pamięci (Android 17 i nowsze wersje), jak i standardowy test porównawczy dla wskaźników pamięci w konsoli Google Play.
Trudno jest zmierzyć wykorzystanie pamięci, które dokładnie odpowiada wartości „anonymous RSS + swap”, zarówno w czasie działania, jak i statycznie w Unreal Engine.
Do śledzenia wykorzystania pamięci Unreal Engine udostępnia VmRSS + VmSwap
wskaźnik. Chociaż jest on szerszy niż „anonymous RSS + swap”, ponieważ VmRSS obejmuje rssFile i rssShmem, nadal stanowi wiarygodne oszacowanie.
Aby przeanalizować wykorzystanie pamięci przez grę:
- Wysyłaj zapytania o pamięć za pomocą interfejsów API C++
- Monitoruj pamięć za pomocą poleceń konsoli
- Wizualizuj pamięć za pomocą Unreal Insights
- Sprawdzaj dokładne wykorzystanie pamięci za pomocą Perfetto
Wysyłanie zapytań o pamięć za pomocą interfejsów API C++
Aby wysyłać zapytania o wskaźniki pamięci, użyj tych interfejsów API C++:
Lekkie zapytanie o pamięć
Aby wysłać lekkie zapytanie o pamięć, użyj GetMemoryUsedFast. W Androidzie ta metoda zwraca szacowany rozmiar, analizując tylko niezbędne pola pamięci z /proc/self/status, zamiast odczytywać cały plik.
Szczegółowe statystyki pamięci
Aby wysyłać zapytania o szczegółowe statystyki pamięci platformy, użyj GetStats. Ta metoda udostępnia kompleksowe statystyki pamięci platformy, zwracając zarówno FPlatformMemoryStats.UsedPhysical, jak i FPlatformMemoryStats.RssFile. Ponieważ UsedPhysical jest sumą VmRSS i VmSwap, możesz zbliżyć się do wartości testu porównawczego, odejmując od niej RssFile.
#include "HAL/PlatformMemory.h"
uint64 GetEstimatedPhysicalMemory()
{
FPlatformMemoryStats Stats = FPlatformMemory::GetStats();
#if PLATFORM_ANDROID
return Stats.UsedPhysical - Stats.RssFile;
#else
return Stats.UsedPhysical;
#endif
}
Monitorowanie pamięci za pomocą poleceń konsoli
Użyj tej metody, aby monitorować trendy wykorzystania pamięci, gdy gra jest uruchomiona na urządzeniu. Aby otworzyć konsolę, dotknij ekranu 4 palcami, a następnie wpisz te polecenia.
| Polecenie | Opis |
|---|---|
stat unit |
Wyświetla bieżące zagregowane wykorzystanie pamięci fizycznej w wierszu Mem, aktualizowane co klatkę. |
stat unitmax |
Wyświetla średnie i szczytowe zagregowane wykorzystanie pamięci fizycznej i wirtualnej w wierszu Mem. |
stat unit
wyświetlająca wiersz MemWizualizowanie pamięci za pomocą Unreal Insights
Unreal Insights umożliwia monitorowanie i wizualizowanie wskaźników pamięci, takich jak statystyki pamięci platformy i niestandardowe liczniki, w czasie za pomocą dokładnych wykresów osi czasu.
- Połącz urządzenie z kanałami śledzenia pamięci za pomocą flag, które obejmują
default,counters, aby wyświetlić wykresPlatformMemory/UsedPhysical(VmRSS + VmSwap) obok osi czasu klatek. - Opcjonalnie: aby dokładniej śledzić niestandardowe wskaźniki pamięci, zadeklaruj i zaktualizuj niestandardowy licznik śledzenia za pomocą
TRACE_DECLARE_MEMORY_COUNTERiTRACE_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());
}
Memory/EstimatedPhysicalMemory licznik.Sprawdzanie dokładnego wykorzystania pamięci za pomocą Perfetto
Aby sprawdzić dokładne wartości „anonymous RSS + swap” systemu operacyjnego Android, a nie oszacowanie, użyj Perfetto. Perfetto rejestruje wskaźniki pamięci na poziomie systemu, aby ocenić dokładny rozmiar gry.