Identifiez les fuites de mémoire, la fragmentation et les erreurs OOM dans vos clusters ACK grâce à des outils de diagnostic visuels.
Le diagnostic de la mémoire couvre trois domaines : vue d'ensemble de la mémoire, analyse de la mémoire et analyse OOM. Inspectez l'utilisation de la mémoire au niveau des nœuds et des pods.
Les éléments de diagnostic affichés reflètent la configuration réelle de votre cluster.
Lorsque vous exécutez un diagnostic, ACK collecte des données depuis chaque nœud, notamment la version du système, l'état de charge, le statut de Docker et de kubelet, ainsi que les messages d'erreur clés présents dans les journaux système. ACK ne collecte aucune donnée métier ni information sensible.
Flux de travail du diagnostic
Utilisez les trois zones de diagnostic dans l'ordre pour cibler un problème de mémoire :
Vue d'ensemble de la mémoire — Vérifiez les risques liés à la mémoire : fuites, fragmentation, entrées Memcg non libérées et gaspillage THP. Utilisez les graphiques pour confirmer si l'utilisation anormale provient de la mémoire du noyau ou de la mémoire applicative.
Analyse de la mémoire — Descendez au niveau des processus et des pods pour identifier quel processus ou conteneur consomme une quantité excessive de mémoire anonyme, de cache de pages ou de mémoire partagée.
Analyse OOM — Examinez le nombre et les types d'événements OOM afin de déterminer si les erreurs surviennent au niveau du nœud (Host) ou du conteneur (cgroup), et quels conteneurs ont atteint leurs limites de mémoire.
Vue d'ensemble de la mémoire
Cette section identifie les risques liés à la mémoire via les éléments de diagnostic suivants.
| Élément de diagnostic | Description |
|---|---|
| Leaked Memory | Vérifie la présence de fuites de mémoire du noyau dans Slab, Vmalloc et le système buddy (allocpage). |
| Memory Usage | Affiche l'utilisation de la mémoire système. |
| Memcg | Vérifie si des groupes de contrôle de mémoire (Memcg) non libérés dégradent les performances du système ou provoquent des erreurs statistiques. |
| Memory Fragmentation | Vérifie la présence de fragmentation de la mémoire qui dégrade les performances du système. |
| THPZeroPage | Évalue le ratio de gaspillage lié aux Transparent Huge Pages (THP). |
L'utilisation de la mémoire système est représentée selon trois catégories :
Mémoire du noyau (kernel) : mémoire totale utilisée par le noyau du système d'exploitation.
Mémoire applicative (app) : mémoire totale utilisée par les programmes en mode utilisateur.
Mémoire libre (free) : mémoire système totale disponible.
Concepts clés
Les termes suivants sont utilisés tout au long du diagnostic de la mémoire.
| Terme | Description |
|---|---|
| Fuite de mémoire | Se produit lorsque la mémoire allouée dynamiquement n'est jamais libérée, entraînant une croissance continue de l'utilisation de la mémoire. Les fuites non résolues dégradent les performances et peuvent provoquer des plantages. |
| Utilisation de la mémoire | Utilisation de la mémoire = (Mémoire totale - Mémoire libre) x 100 / Mémoire totale. Le cache de pages compte comme de la mémoire libre et n'affecte pas l'utilisation, car le noyau peut le récupérer à tout moment. |
| Memcg non libéré | Groupe de contrôle de mémoire non libéré en raison d'une exception système. Peut dégrader les performances du système. |
| Fragmentation de la mémoire | Avec le temps, les blocs de mémoire contigus libres deviennent trop petits pour satisfaire les demandes d'allocation importantes. Cela retarde l'allocation et provoque une instabilité des applications. |
| Ratio de gaspillage THP | Ratio de gaspillage THP = Nombre de THP zéro x 100 % / Nombre total de THP. Consultez les détails sur les THP ci-dessous. |
| Système buddy | Algorithme du noyau Linux pour la gestion des pages mémoire. Il divise les pages en 11 groupes avec des tailles de blocs en puissances de deux : 4 Ko, 8 Ko, 16 Ko, 32 Ko ... 4 Mo. La plupart des pages font 4 Ko. |
| Slab | Alloue de petits morceaux de mémoire au-dessus du système buddy. |
| Vmalloc | Alloue de la mémoire avec un mappage non linéaire au-dessus du système buddy. |
| Cache de pages (filecache) | Linux met en cache le contenu des fichiers en mémoire pour accélérer les accès ultérieurs. |
| Mémoire anonyme | Mémoire allouée dynamiquement au tas et à la pile d'un processus via new, malloc ou mmap. Elle n'est pas associée à un système de fichiers. |
| Mémoire partagée | Bloc de mémoire partagé par deux processus ou plus pour la communication inter-processus. |
| tmpfs | Système de fichiers temporaire Linux reposant sur la mémoire. Toutes les lectures et écritures sont mises en cache en mémoire. |
| hugetlb | Mémoire consommée par les pages énormes dans un système de fichiers. |
Détails sur les THP
Les Transparent Huge Pages (THP) sont des pages énormes de 2 Mio ou 1 Gio dans le noyau. Chaque sous-page fait 4 Kio, donc une THP de 2 Mio équivaut à 512 sous-pages.
Lorsque les THP sont activées, le noyau alloue dynamiquement des THP pour réduire les défauts TLB (Translation Lookaside Buffer) et améliorer les performances. Cependant, les THP peuvent entraîner un gonflement de la mémoire et une surallocation : lorsqu'une application demande seulement 8 Kio (2 sous-pages), le noyau alloue une THP complète de 2 Mio, laissant 510 sous-pages à zéro qui gaspillent la taille de l'ensemble résident (RSS) et peuvent déclencher des erreurs OOM.
Métriques de la mémoire du noyau
Dans la plupart des cas, les fuites de mémoire se manifestent par une utilisation anormale dans Sunreclaim ou le système buddy. Surveillez attentivement ces métriques.
| Métrique | Description |
|---|---|
| SReclaimable | Mémoire que Slab peut récupérer. |
| Sunreclaim | Mémoire que Slab ne peut pas récupérer. Une croissance anormale indique fortement une fuite de mémoire du noyau. |
| PageTables | Mémoire occupée par les tables de pages du noyau. |
| Vmalloc | Mémoire allouée par Vmalloc. |
| KernelStack | Mémoire totale de pile du noyau utilisée par les processus. |
| AllocPages | Mémoire allouée depuis le système buddy par des fonctions telles que alloc_pages. Non récupérable via aucun fichier de nœud ; une utilisation excessive crée un trou noir de mémoire. |
Métriques de la mémoire applicative
Lors de l'analyse de l'utilisation de la mémoire en mode utilisateur, concentrez-vous sur la mémoire anonyme, la mémoire partagée et le cache de pages.
| Métrique | Description |
|---|---|
| filecache | Cache de pages pouvant être récupéré en exécutant drop caches. |
| anon | Mémoire anonyme utilisée par le tas et la pile d'un programme. Une utilisation élevée suggère une fuite de mémoire du processus ou l'activation des THP. |
| mlock | Mémoire verrouillée par le système. |
| huge | Mémoire utilisée par les pages énormes. |
| buffer | Mémoire utilisée par les métadonnées des périphériques bloc et du système de fichiers. |
| shmem | Mémoire partagée (tmpfs). Des fuites se produisent si un fichier tmpfs n'est pas supprimé après la fin du processus, ou si un fichier est supprimé alors qu'il est encore ouvert. |
Analyse de la mémoire
Propose deux vues : mémoire des processus et mémoire des pods.
Mémoire des processus
Liste les processus triés par utilisation de la mémoire et détaille la mémoire anonyme, le cache de pages et la mémoire partagée.
Mémoire des pods
Indique quels fichiers occupent le cache de pages et la mémoire partagée dans chaque conteneur et pod, avec les ratios de cache actif et inactif.
| Élément de diagnostic | Description |
|---|---|
| Pod | Nom du pod. |
| Container | Nom du conteneur. |
| File | Chemin complet du fichier, incluant le nom du fichier. |
| Cache | Cache de pages (filecache) occupé par le fichier. |
| Container Cache | Cache au niveau du conteneur occupé par le fichier. Plusieurs processus dans le même conteneur peuvent référencer le même fichier. |
| Active Cache | Cache de pages actuellement utilisé. |
| Inactive Cache | Cache de pages non utilisé, éligible à la récupération. |
Analyse OOM
Diagnostique les erreurs d'épuisement de la mémoire (out-of-memory) via les éléments suivants.
| Élément de diagnostic | Description |
|---|---|
| OS OOM Count | Nombre total d'erreurs OOM depuis le démarrage de l'hôte jusqu'au diagnostic. |
| Available Memory | Mémoire système libre actuelle. |
| Low Watermark | Seuil bas de mémoire. Lorsque la mémoire disponible descend en dessous de cette valeur, le noyau déclenche une récupération asynchrone de la mémoire. |
| Container | Nom du pod, ID du conteneur ou nom du cgroup. |
| limit | Limite de mémoire configurée pour le conteneur. |
| usage | Mémoire actuellement utilisée par le conteneur. |
| OOM Count | Nombre total d'erreurs OOM dans le conteneur. |
| OOM Type | Type d'erreur OOM : Host ou cgroup. |