L'utilisation de la mémoire (RSS anonyme + espace d'échange) est une métrique d'Android Vitals qui reflète l'utilisation de la mémoire de votre application.
La mémoire anonyme est une mémoire qui n'est pas sauvegardée par un fichier de stockage, comme les allocations de segments de mémoire et la mémoire allouée par mmap. La taille de l'ensemble résident (RSS) correspond au nombre total de pages de mémoire (partagées et non partagées) utilisées par un processus et stockées dans la RAM physique. Pour la mémoire anonyme, le système peut écrire des pages dans l'espace d'échange (ou zRAM sur Android) lorsque la mémoire est sous pression.
L'utilisation de la mémoire (RSS anonyme + espace d'échange) est une mesure du nombre total de pages de mémoire de votre application qui ne sont pas sauvegardées par un fichier de stockage, y compris la mémoire conservée par le système dans l'espace d'échange. Le suivi du RSS anonyme et de l'espace d'échange vous permet de voir l'espace mémoire réel et non évictable utilisé par votre application.
Identifier l'utilisation élevée de la mémoire
Android Vitals
Android Vitals partage l'utilisation de la mémoire de votre application, répartie selon les états de processus suivants :
- Premier plan : le processus de l'application est visible. Un P99 élevé affecte souvent les performances perçues par l'utilisateur (ralentissements ou plantages OOM) et est fortement influencé par la conservation de composants d'UI ou d'activités qui ne sont plus nécessaires.
- Services perçus par l'utilisateur : le processus de l'application s'exécute dans un état perceptible. Cela inclut les services de premier plan, les tâches accélérées et les tâches de transfert de données déclenchées par l'utilisateur. Il peut également s'étendre aux services liés au système ou aux services liés par d'autres applications. Étant donné que ces services sont conçus pour des tâches de longue durée, la conservation de la mémoire en raison de fuites ou l'absence de libération des ressources peut augmenter la queue de distribution P99 au fil du temps.
- Arrière-plan : l'application exécute un service d'arrière-plan ou a récemment été placée en arrière-plan, mais n'est pas encore mise en cache. C'est là que les fuites de traitement en arrière-plan et les ressources non libérées peuvent s'accumuler. Comme cet état de processus est moins important que les processus de premier plan ou perceptibles, essayez d'éviter de conserver de grandes quantités de mémoire dans cet état.
- En cache : l'application est dans un état de mise en cache. Cet état est très sensible à la sollicitation de la mémoire système, comme les LMK. Étant donné que l'OS peut supprimer cet état de processus à volonté, il n'est fourni qu'à des fins de débogage.
Pour comprendre comment ces états de processus sont corrélés aux rappels onTrimMemory, consultez les conseils sur la libération de la mémoire en réponse aux événements.
Android Vitals ventile également l'utilisation de la mémoire de votre application par buckets de RAM. La métrique d'utilisation de la mémoire s'affiche sous la forme d'une chronologie des valeurs de centile quotidiennes, ainsi que de la valeur quotidienne la plus récente pour les 50e et 90e centiles.
Identifier les fuites de mémoire à l'aide de l'asymétrie de queue
Pour identifier les fuites de mémoire, recherchez une divergence entre vos utilisateurs types (P50) et vos utilisateurs finaux (P99) dans Android Vitals. Alors que l'augmentation générale des éléments gonfle la mémoire de manière uniforme sur tous les centiles, les fuites de mémoire s'accumulent au fil du temps, ce qui fausse fortement les données de fin de distribution (P99).
Comparez vos métriques P90 et P99 à votre référence P50 par nom de processus. Si votre ratio P99/P50 est supérieur ou égal à 3,5, cela indique une fuite de mémoire probable lors des sessions prolongées. Pour certains cas d'utilisation, un ratio élevé n'indique pas toujours une fuite. Évaluez donc le workflow spécifique pour déterminer si l'utilisation élevée de la mémoire est un comportement attendu.