Identifique fugas de memoria, fragmentación y errores OOM en clústeres de ACK mediante diagnósticos visuales.
El diagnóstico de memoria abarca tres áreas: descripción general de la memoria, análisis de memoria y análisis de OOM. Inspeccione la memoria tanto en el nodo como en el pod.
Los elementos de diagnóstico mostrados reflejan la configuración real de su clúster.
Al ejecutar los diagnósticos, ACK recopila datos de cada nodo, incluida la versión del sistema, el estado de carga, el estado de docker y kubelet, así como mensajes de error clave en los registros del sistema. ACK no recopila datos comerciales ni información confidencial.
Flujo de trabajo de diagnóstico
Utilice las tres áreas de diagnóstico en secuencia para acotar un problema de memoria:
Descripción general de la memoria: compruebe si existen riesgos de memoria, como fugas, fragmentación, entradas Memcg no liberadas o desperdicio de THP. Use los gráficos para confirmar si el uso anómalo corresponde a la memoria del kernel o de la aplicación.
Análisis de memoria: profundice en el uso de memoria a nivel de proceso y de pod para identificar qué proceso o contenedor consume una cantidad excesiva de memoria anónima, caché de páginas o memoria compartida.
Análisis de OOM: revise el recuento y los tipos de eventos OOM para determinar si los errores ocurren a nivel de nodo (host) o de contenedor (cgroup), y qué contenedores han alcanzado sus límites de memoria.
Descripción general de la memoria
Identifica riesgos de memoria en los siguientes elementos de diagnóstico.
|
Elemento de diagnóstico |
Descripción |
|
Leaked Memory |
Comprueba si hay fugas de memoria del kernel en Slab, Vmalloc y el sistema buddy (allocpage). |
|
Memory Usage |
Muestra la utilización de la memoria del sistema. |
|
Memcg |
Verifica si los grupos de control de memoria (Memcg) no liberados degradan el rendimiento del sistema o causan errores estadísticos. |
|
Memory Fragmentation |
Detecta fragmentación de memoria que degrade el rendimiento del sistema. |
|
THPZeroPage |
Evalúa la proporción de desperdicio de Transparent Huge Page (THP). |
El uso de la memoria del sistema se grafica en tres categorías:
Memoria del kernel (kernel): memoria total que utiliza el kernel del sistema operativo.
Memoria de la aplicación (app): memoria total que utilizan los programas en modo usuario.
Memoria libre (free): memoria total disponible en el sistema.
Conceptos clave
A continuación se presentan los términos utilizados en el diagnóstico de memoria.
|
Término |
Descripción |
|
Fuga de memoria |
Ocurre cuando la memoria asignada dinámicamente nunca se libera, lo que provoca un crecimiento continuo en su uso. Las fugas sin resolver degradan el rendimiento y pueden causar bloqueos. |
|
Utilización de memoria |
Utilización de memoria = (Memoria total - Memoria libre) x 100 / Memoria total. La caché de páginas cuenta como memoria libre y no afecta la utilización, ya que el kernel puede recuperarla en cualquier momento. |
|
Memcg no liberado |
Grupo de control de memoria que no se liberó debido a una excepción del sistema. Puede degradar el rendimiento. |
|
Fragmentación de memoria |
Con el tiempo, los bloques contiguos de memoria libre se vuelven demasiado pequeños para solicitudes de asignación grandes. Esto retrasa la asignación y causa inestabilidad en las aplicaciones. |
|
Proporción de desperdicio de THP |
Proporción de desperdicio de THP = Número de THP vacías x 100% / Número total de THP. Consulte la sección Detalles de THP más adelante. |
|
Sistema buddy |
Algoritmo del kernel de Linux para gestionar páginas de memoria. Divide las páginas en 11 grupos con tamaños de bloque en potencias de dos: 4 KB, 8 KB, 16 KB, 32 KB ... 4 MB. La mayoría de las páginas son de 4 KB. |
|
Slab |
Asigna pequeños fragmentos de memoria sobre el sistema buddy. |
|
Vmalloc |
Asigna memoria con asignación de memoria no lineal sobre el sistema buddy. |
|
Caché de páginas (filecache) |
Linux almacena en caché el contenido de archivos en la memoria para acelerar accesos posteriores. |
|
Memoria anónima |
Memoria asignada dinámicamente al heap y la pila de un proceso mediante |
|
Memoria compartida |
Bloque de memoria compartido por dos o más procesos para la comunicación entre ellos. |
|
tmpfs |
Sistema de archivos temporal de Linux respaldado por memoria. Todas las lecturas y escrituras se almacenan en caché en la memoria. |
|
hugetlb |
Memoria consumida por páginas enormes (huge pages) en un sistema de archivos. |
Detalles de THP
Las Transparent Huge Pages (THP) son páginas enormes de 2 MiB o 1 GiB en el kernel. Cada subpágina es de 4 KiB, por lo que una THP de 2 MiB equivale a 512 subpáginas.
Con THP habilitado, el kernel asigna dinámicamente estas páginas para reducir los fallos en el Translation Lookaside Buffer (TLB) y mejorar el rendimiento. Sin embargo, THP puede provocar inflación de memoria y sobreasignación: cuando una aplicación solicita solo 8 KiB (2 subpáginas), el kernel asigna una THP completa de 2 MiB, deja 510 subpáginas vacías que desperdician espacio residente (RSS) y pueden desencadenar errores OOM.
Métricas de memoria del kernel
En la mayoría de los casos, las fugas de memoria se manifiestan mediante un uso anómalo en Sunreclaim o en el sistema buddy. Supervise estas métricas de cerca.
|
Métrica |
Descripción |
|
SReclaimable |
Memoria que Slab puede recuperar. |
|
Sunreclaim |
Memoria que Slab no puede recuperar. Un crecimiento anómalo indica fuertemente una fuga de memoria del kernel. |
|
PageTables |
Memoria ocupada por las tablas de páginas del kernel. |
|
Vmalloc |
Memoria asignada por Vmalloc. |
|
KernelStack |
Memoria total de pila del kernel que utilizan los procesos. |
|
AllocPages |
Memoria asignada desde el sistema buddy mediante funciones como |
Métricas de memoria de la aplicación
Al analizar el uso de memoria en modo usuario, céntrese en la memoria anónima, la memoria compartida y la caché de páginas.
|
Métrica |
Descripción |
|
filecache |
Caché de páginas que se puede recuperar al ejecutar drop caches. |
|
anon |
Memoria anónima que utilizan el heap y la pila de un programa. Un uso elevado sugiere una fuga de memoria en el proceso o que THP está habilitado. |
|
mlock |
Memoria bloqueada por el sistema. |
|
huge |
Memoria que utilizan las páginas enormes. |
|
buffer |
Memoria que utilizan los metadatos de dispositivos de bloque y sistemas de archivos. |
|
shmem |
Memoria compartida (tmpfs). Se producen fugas si un archivo tmpfs no se elimina después de que el proceso finaliza, o si se elimina un archivo mientras aún está abierto. |
Análisis de memoria
Proporciona dos vistas: memoria de procesos y memoria de pods.
Memoria de procesos
Enumera los procesos ordenados por uso de memoria y desglosa la memoria anónima, la caché de páginas y la memoria compartida.
Memoria de pods
Muestra qué archivos ocupan caché de páginas y memoria compartida en cada contenedor y pod, junto con las proporciones de caché activa e inactiva.
|
Elemento de diagnóstico |
Descripción |
|
Pod |
Nombre del pod. |
|
Container |
Nombre del contenedor. |
|
File |
Ruta completa del archivo, incluido su nombre. |
|
Cache |
Caché de páginas (filecache) ocupada por el archivo. |
|
Container Cache |
Caché a nivel de contenedor ocupada por el archivo. Varios procesos en el mismo contenedor pueden hacer referencia al mismo archivo. |
|
Active Cache |
Caché de páginas actualmente en uso. |
|
Inactive Cache |
Caché de páginas no utilizada, apta para recuperación. |
Análisis de OOM
Diagnostica errores de falta de memoria (out-of-memory) en los siguientes elementos.
|
Elemento de diagnóstico |
Descripción |
|
OS OOM Count |
Total de errores OOM desde el inicio del host hasta el diagnóstico. |
|
Available Memory |
Memoria libre actual del sistema. |
|
Low Watermark |
Umbral bajo de memoria. Cuando la memoria disponible cae por debajo de este valor, el kernel activa la recuperación asíncrona de memoria. |
|
Container |
Nombre del pod, ID del contenedor o nombre del cgroup. |
|
limit |
Límite de memoria configurado para el contenedor. |
|
usage |
Memoria que utiliza actualmente el contenedor. |
|
OOM Count |
Total de errores OOM en el contenedor. |
|
OOM Type |
Tipo de error OOM: Host o cgroup. |