Проверка использования памяти в Unreal Engine.

Показатель « 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++

Для запроса метрик памяти используйте следующие 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 отображается среднее и пиковое значение суммарного использования физической и виртуальной памяти за сессию.

Наложение статистических данных Unreal Engine, отображающее строку "Память".
Рисунок 1. Наложение данных stat unit , отображающее строку Mem .

Визуализируйте память с помощью Unreal Insights.

Unreal Insights позволяет отслеживать и визуализировать показатели памяти, такие как статистика использования памяти платформой и пользовательские счетчики, с течением времени, используя покадровые графики временной шкалы.

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

Unreal Insights отображает объем памяти/предполагаемый объем физической памяти.
Рисунок 2. Временная шкала Unreal Insights, отображающая пользовательский счетчик Memory/EstimatedPhysicalMemory .

Проверьте точное использование памяти с помощью Perfetto.

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

Интерфейс Perfetto UI отображает анонимные RSS-ленты, запросы на обмен и их суммирование.
Рисунок 3. Пользовательский интерфейс Perfetto, отображающий анонимный RSS, обмен и запрос на суммирование.