Показатель « anonymous RSS + swap », отражающий нагрузку на память процесса, является критически важным для поддержания стабильности игры. Он служит как пороговым значением ограничения памяти для Memory Limiter (Android 17 и выше), так и стандартным бенчмарком для Memory Vitals в Google Play Console.
В рамках Unreal Engine сложно точно измерить использование памяти, соответствующее "анонимному RSS + файлу подкачки", ни во время выполнения, ни статически.
Для отслеживания использования памяти Unreal Engine предоставляет метрику VmRSS + VmSwap . Хотя она шире, чем «анонимный RSS + swap», поскольку VmRSS включает rssFile и rssShmem , она все же служит надежной оценкой.
Следуйте этим инструкциям, чтобы проанализировать объем памяти, используемый вашей игрой:
- Запрос памяти с использованием API C++
- Отслеживайте использование памяти с помощью консольных команд.
- Визуализируйте память с помощью Unreal Insights.
- Проверьте точное использование памяти с помощью Perfetto.
Запрос памяти с использованием API C++
Для запроса метрик памяти используйте следующие API C++:
Легковесный запрос к памяти
Используйте GetMemoryUsedFast для упрощенного запроса к данным об использовании памяти. На Android этот метод возвращает приблизительный объем занимаемой памяти, анализируя только необходимые поля памяти из /proc/self/status , а не считывая весь файл целиком.
Подробная статистика памяти
Используйте GetStats для получения подробной статистики использования памяти платформы. Этот метод предоставляет исчерпывающую статистику использования памяти платформы, возвращая значения FPlatformMemoryStats.UsedPhysical и FPlatformMemoryStats.RssFile . Поскольку UsedPhysical представляет собой сумму VmRSS и VmSwap , вы можете приблизиться к значению, полученному в результате бенчмарка, вычитая из него 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 отображается среднее и пиковое значение суммарного использования физической и виртуальной памяти за сессию. |

stat unit , отображающее строку Mem .
Визуализируйте память с помощью Unreal Insights.
Unreal Insights позволяет отслеживать и визуализировать показатели памяти, такие как статистика использования памяти платформой и пользовательские счетчики, с течением времени, используя покадровые графики временной шкалы.
- Подключите ваше устройство к каналам трассировки памяти, указав флаги, включающие
default,countersчтобы просмотреть графикPlatformMemory/UsedPhysical(VmRSS + VmSwap) рядом с временной шкалой кадров. - Необязательно: для более детального отслеживания пользовательских метрик памяти объявите и обновите пользовательский счетчик трассировки, используя
TRACE_DECLARE_MEMORY_COUNTERи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());
}

Memory/EstimatedPhysicalMemory .
Проверьте точное использование памяти с помощью Perfetto.
Чтобы проверить точные значения « анонимного RSS + подкачка » в операционной системе Android, а не приблизительные, используйте Perfetto . Perfetto собирает метрики памяти на системном уровне, чтобы оценить точное потребление памяти вашей игрой.
