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 (tanto compartidas como no compartidas) que utiliza un proceso y que se almacenan 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 cualquier memoria que el sistema también conserve en el intercambio. El seguimiento del RSS anónimo y del espacio de intercambio garantiza que veas el espacio en memoria real y no expulsable 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 de proceso:
- Primer plano: El proceso de la app es visible. Un P99 alto suele afectar el rendimiento percibido por el usuario (tirones o fallas por falta de memoria) 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 los servicios en primer plano, los trabajos acelerados y los trabajos de transferencia de datos iniciados por el usuario. También se puede extender a servicios vinculados al sistema o a servicios vinculados por otras apps. Dado que estos servicios están diseñados para tareas de larga duración, retener memoria debido a fugas o no liberar recursos puede aumentar la cola del P99 con el tiempo.
- Segundo plano: La app está ejecutando un servicio en segundo plano o se pasó a segundo plano recientemente, pero aún no se almacenó en caché. Aquí es donde se pueden acumular las pérdidas de procesamiento en segundo plano y los recursos no liberados. Dado 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.
- Almacenada en caché: La app está en estado de caché. Este estado es muy sensible a la presión de la memoria del sistema, como los LMK. Dado 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 del proceso con las devoluciones de llamada de onTrimMemory, consulta la guía para liberar memoria en respuesta a eventos.
Android vitals también desglosa el uso de memoria de tu app por intervalos de RAM. La métrica de uso de memoria se muestra como una línea de tiempo de los valores de percentil diarios, junto con el valor diario más reciente para los percentiles 50 y 90.
Identifica las fugas de memoria con el sesgo de cola
Para identificar pérdidas de memoria, busca una divergencia entre los usuarios típicos (P50) y los usuarios de la cola (P90) en Android vitals. Si bien el aumento general de recursos infla la memoria de manera uniforme en todos los percentiles, las pérdidas de memoria se agravan con el tiempo, lo que sesga en gran medida los datos de la cola.
Debes comparar tus métricas de P90 y P99 con tu modelo de referencia de P50 por nombre de proceso. Si la proporción entre el P90 y el P50 supera 3.5, indica una posible fuga de memoria durante las sesiones extendidas. En ciertos casos de uso, una proporción elevada no siempre indica una pérdida, pero debes evaluar el flujo de trabajo específico para determinar si el uso elevado de memoria es el comportamiento esperado.