Representando a pressão de memória de um processo, 'RSS anônimo + troca' é uma métrica essencial para manter a estabilidade do jogo. Ele serve como limite de memória para o limitador de memória (Android 17 e mais recentes) e como referência padrão para as principais métricas de memória no Google Play Console.
É difícil medir o uso da memória que corresponda exatamente ao "RSS anônimo + troca" no tempo de execução ou estaticamente na Unreal Engine.
Para rastrear o uso da memória, a Unreal Engine fornece a VmRSS + VmSwap
métrica. Embora seja mais ampla do que "RSS anônimo + troca" porque VmRSS inclui rssFile e rssShmem, ela ainda serve como uma estimativa confiável.
Siga estas orientações para analisar o consumo de memória do jogo:
- Consultar a memória usando APIs C++
- Monitorar a memória usando comandos do console
- Visualizar a memória com o Unreal Insights
- Verificar o uso preciso da memória usando o Perfetto
Consultar a memória usando APIs C++
Use as APIs C++ a seguir para consultar métricas de memória:
Consulta de memória leve
Use GetMemoryUsedFast para uma consulta de memória leve. No Android, esse método retorna o consumo estimado analisando apenas os campos de memória necessários de /proc/self/status, em vez de ler o arquivo inteiro.
Estatísticas de memória detalhadas
Use GetStats para consultar estatísticas detalhadas de memória da plataforma. Esse método fornece estatísticas abrangentes de memória da plataforma, retornando FPlatformMemoryStats.UsedPhysical e FPlatformMemoryStats.RssFile. Como UsedPhysical é a soma de VmRSS e VmSwap, você pode se aproximar do valor de referência subtraindo RssFile dele.
#include "HAL/PlatformMemory.h"
uint64 GetEstimatedPhysicalMemory()
{
FPlatformMemoryStats Stats = FPlatformMemory::GetStats();
#if PLATFORM_ANDROID
return Stats.UsedPhysical - Stats.RssFile;
#else
return Stats.UsedPhysical;
#endif
}
Monitorar a memória usando comandos do console
Use essa abordagem para monitorar as tendências de memória enquanto o jogo está em execução no dispositivo. Para abrir o console, toque na tela com quatro dedos e insira os comandos a seguir.
| Comando | Descrição |
|---|---|
stat unit |
Mostra o uso agregado atual da memória física na linha Mem, atualizado a cada frame. |
stat unitmax |
Mostra o uso médio e de pico da memória física e virtual agregada da sessão na linha Mem. |
stat unit
exibindo a linha Mem.Visualizar a memória com o Unreal Insights
O Unreal Insights permite monitorar e visualizar métricas de memória, como estatísticas de memória da plataforma e contadores personalizados, ao longo do tempo usando gráficos de linha do tempo precisos.
- Conecte o dispositivo aos canais de rastreamento de memória com flags que incluem
default,counterspara conferir o gráficoPlatformMemory/UsedPhysical(VmRSS + VmSwap) ao lado da linha do tempo do frame. - Opcional: para rastrear métricas de memória personalizadas com mais detalhes, declare e atualize um contador de rastreamento personalizado usando
TRACE_DECLARE_MEMORY_COUNTEReTRACE_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.Verificar o uso preciso da memória usando o Perfetto
Para verificar os valores exatos do 'RSS anônimo + troca' do SO Android em vez de uma estimativa, use Perfetto. O Perfetto captura métricas de memória no nível do sistema para avaliar o consumo exato do jogo.