El uso de memoria (RSS anónimo + intercambio) es una métrica de Android vitals que refleja el uso de memoria de tu app.
La memoria anónima es la memoria que no está respaldada por un archivo en el almacenamiento, como las asignaciones de montón y la memoria asignada por mmap. El tamaño del conjunto residente (RSS) es la cantidad total de páginas de memoria (compartidas y no compartidas) que usa un proceso y que se conservan en la RAM física. En el caso de la memoria anónima, el sistema puede escribir páginas en el espacio de intercambio (o zRAM en Android) cuando la memoria está bajo presión.
En conjunto, el uso de memoria (RSS anónimo + intercambio) es una medida de la cantidad total de páginas de memoria de tu app que no están respaldadas por un archivo en el almacenamiento, incluida la memoria que el sistema también conserva en el intercambio. El seguimiento del RSS anónimo y el intercambio garantiza que veas el espacio en memoria real y no desalojable de tu app.
Identifica el uso elevado de memoria
Android vitals
Android vitals comparte el uso de memoria de tu app desglosado por los siguientes estados del proceso:
- Primer plano: El proceso de la app es visible. Un P99 alto suele afectar el rendimiento percibido por el usuario (fallas por falta de memoria o jank) y se debe, en gran medida, a la retención de componentes o actividades de la IU que ya no son necesarios.
- Servicios percibidos por el usuario: El proceso de la app se ejecuta en un estado perceptible. Esto incluye servicios en primer plano, trabajos acelerados y trabajos de transferencia de datos iniciados por el usuario. También puede extenderse a servicios vinculados al sistema o servicios vinculados por otras apps. Debido a que estos servicios están diseñados para tareas de larga duración, retener la memoria debido a fugas o no liberar recursos puede inflar la cola del P99 con el tiempo.
- Segundo plano: La app ejecuta un servicio en segundo plano o se envió recientemente a segundo plano, pero aún no se almacenó en caché. Aquí es donde se pueden acumular las fugas de procesamiento en segundo plano y los recursos no liberados. Debido a que este estado del proceso es menos importante que los procesos en primer plano o perceptibles, intenta evitar retener grandes cantidades de memoria en este estado.
- En caché: La app está en un estado almacenado en caché. Este estado es muy sensible a la presión de la memoria del sistema, como los LMK. Debido a que el SO puede expulsar este estado del proceso a voluntad, este estado solo se proporciona con fines de depuración.
Para comprender cómo se correlacionan estos estados de proceso con las devoluciones de llamada de onTrimMemory, consulta la guía sobre cómo liberar memoria en respuesta a eventos.
Android vitals también desglosa el uso de memoria de tu app por buckets de RAM. La métrica de uso de memoria se muestra como un cronograma de valores de percentiles diarios, junto con el valor diario más reciente para los percentiles 50 y 90.
Identifica fugas de memoria con el sesgo de cola
Para identificar las fugas de memoria, busca una divergencia entre los usuarios típicos (P50) y los de cola (P99) en Android vitals. Mientras que el aumento general de recursos infla la memoria de manera uniforme en todos los percentiles, las fugas de memoria se acumulan con el tiempo, lo que sesga en gran medida los datos finales (P99).
Compara tus métricas P90 y P99 con tu modelo de referencia P50 por nombre de proceso. Si la proporción entre el percentil 99 y el percentil 50 es de 3.5 veces o más, indica una probable fuga de memoria durante las sesiones extendidas. En ciertos casos de uso, una proporción elevada no siempre indica una fuga, por lo que debes evaluar el flujo de trabajo específico para determinar si el uso elevado de memoria es un comportamiento esperado.