Memoria utilizzata (RSS anonimo + swap) è una metrica di Android vitals che riflette l'utilizzo di memoria della tua app.
La memoria anonima è una memoria non supportata da un file nello spazio di archiviazione, ad esempio allocazioni heap e memoria allocata con mmap. La dimensione del set residente (RSS) è il numero totale di pagine di memoria (condivise e non condivise) utilizzate da un processo che sono memorizzate nella RAM fisica. Per la memoria anonima, il sistema può scrivere pagine nello spazio di swap (o zRAM su Android) quando la memoria è sotto pressione.
L'utilizzo totale della memoria (RSS anonimo + swap) è una misura del numero totale di pagine di memoria della tua app non supportate da un file nello spazio di archiviazione, inclusa qualsiasi memoria conservata anche dal sistema nello swap. Il monitoraggio dell'RSS anonimo + swap ti consente di visualizzare il footprint della memoria effettivo e non eliminabile della tua app.
Identificare l'utilizzo elevato di memoria
Android vitals
Android vitals condivide la memoria utilizzata della tua app suddivisa in base ai seguenti stati del processo:
- In primo piano: il processo dell'app è visibile. Un P99 elevato in questo caso spesso influisce sulle prestazioni percepite dall'utente (scatti o arresti anomali per esaurimento della memoria) ed è fortemente influenzato dal mantenimento di componenti o attività dell'interfaccia utente non più necessari.
- Servizi percepiti dall'utente: il processo dell'app è in esecuzione in uno stato percepibile. Sono inclusi i servizi in primo piano, i job rapidi e i job di trasferimento di dati avviati dall'utente. Può anche estendersi a servizi associati al sistema o ad altri servizi associati ad altre app. Poiché questi servizi sono progettati per attività di lunga durata, la conservazione della memoria a causa di perdite o il mancato rilascio delle risorse può gonfiare la coda P99 nel tempo.
- In background: l'app sta eseguendo un servizio in background o è stata recentemente messa in background, ma non è ancora memorizzata nella cache. È qui che si accumulano le perdite di elaborazione in background e le risorse non rilasciate. Poiché questo stato del processo è meno importante dei processi in primo piano o percepibili, cerca di evitare di conservare grandi quantità di memoria in questo stato.
- Memorizzata nella cache: l'app è in uno stato memorizzato nella cache. Questo stato è molto sensibile alla pressione della memoria di sistema, ad esempio LMK. Poiché il sistema operativo può eliminare questo stato del processo a suo piacimento, questo stato viene fornito solo a scopo di debug.
Per capire come questi stati di processo sono correlati ai callback onTrimMemory,
consulta le indicazioni sul rilascio della memoria in risposta agli eventi.
Android vitals suddivide anche la memoria utilizzata dalla tua app in base alle categorie di RAM. La metrica Utilizzo della memoria viene visualizzata come una cronologia dei valori percentili giornalieri, insieme al valore giornaliero più recente per il 50° e il 90° percentile.
Identificare le perdite di memoria utilizzando l'asimmetria della coda
Per identificare le perdite di memoria, cerca una divergenza tra gli utenti tipici (P50) e quelli di coda (P90) in Android vitals. Mentre il bloat generale degli asset gonfia la memoria in modo uniforme in tutti i percentili, le perdite di memoria si accumulano nel tempo, alterando notevolmente i dati finali.
Devi confrontare le metriche P90 e P99 con la base di riferimento P50 in base al nome del processo. Se il rapporto P90/P50 supera 3,5 volte, è probabile che si verifichi una perdita di memoria durante le sessioni prolungate. Per alcuni casi d'uso, un rapporto elevato non indica sempre una perdita, ma devi valutare il flusso di lavoro specifico per determinare se la memoria utilizzata elevata è un comportamento previsto.