O uso da memória (RSS anônimo e espaço de troca) é uma métrica do Android vitals que reflete o uso da memória do seu app.
A memória anônima não é protegida por um arquivo no armazenamento, como alocações de heap e memória alocada por mmap. O Resident Set Size (RSS) é o número total de páginas de memória (compartilhadas e não compartilhadas) usadas por um processo que são mantidas na RAM física. Para memória anônima, o sistema pode gravar páginas no espaço de troca (ou zRAM no Android) quando a memória está sob pressão.
No total, o uso da memória (RSS anônimo + troca) é uma medida do número total de páginas de memória do app que não são protegidas por um arquivo no armazenamento, incluindo qualquer memória que também esteja sendo preservada pelo sistema na troca. O rastreamento do RSS anônimo + troca garante que você veja o consumo de memória verdadeiro e não removível do app.
Identificar o uso elevado da memória
Android vitals
O Android vitals compartilha o uso da memória do app dividido pelos seguintes estados de processo:
- Em primeiro plano: o processo do app está visível. Um P99 alto aqui geralmente afeta o desempenho percebido pelo usuário (instabilidade ou falhas de OOM) e é muito influenciado pela retenção de componentes ou atividades da interface que não são mais necessários.
- Serviços percebidos pelo usuário: o processo do app está em um estado perceptível. Isso inclui serviços em primeiro plano, jobs acelerados e jobs de transferência de dados iniciados pelo usuário. Ele também pode se estender a serviços vinculados ao sistema ou a outros apps. Como esses serviços são projetados para tarefas de longa duração, manter a memória devido a vazamentos ou não liberar recursos pode aumentar a cauda P99 com o tempo.
- Segundo plano: o app está executando um serviço em segundo plano ou foi colocado em segundo plano recentemente, mas ainda não está em cache. É aqui que os vazamentos de processamento em segundo plano e os recursos não liberados podem se acumular. Como esse estado de processo é menos importante do que os processos em primeiro plano ou perceptíveis, evite reter grandes quantidades de memória nesse estado.
- Em cache: o app está em estado de cache. Esse estado é altamente sensível à pressão da memória do sistema, como LMKs. Como o SO pode desalojar esse estado de processo a qualquer momento, ele é fornecido apenas para fins de depuração.
Para entender como esses estados de processo se correlacionam com callbacks onTrimMemory,
consulte as orientações sobre liberar memória em resposta a eventos.
O Android vitals também detalha o uso da memória do app por intervalos de RAM. A métrica de uso da memória é mostrada como uma linha do tempo de valores diários de percentil, além do valor diário mais recente para os percentis 50 e 90.
Identificar vazamentos de memória usando o desvio de cauda
Para ajudar a identificar vazamentos de memória, procure uma divergência entre os usuários típicos (P50) e de ponta (P90) no Android vitals. Enquanto o aumento geral de recursos aumenta a memória de maneira uniforme em todos os percentis, os vazamentos de memória se agravam com o tempo, distorcendo muito os dados finais.
Compare as métricas P90 e P99 com o valor de referência P50 por nome do processo. Se a proporção P90/P50 exceder 3,5 vezes, isso indica um possível vazamento de memória durante sessões prolongadas. Em alguns casos de uso, uma proporção elevada nem sempre indica um vazamento, mas é necessário avaliar o fluxo de trabalho específico para determinar se o uso elevado da memória é um comportamento esperado.