Agence web » Actualités du digital » Comment vérifier l'utilisation de la mémoire à partir du terminal Linux

Comment vérifier l'utilisation de la mémoire à partir du terminal Linux

Il existe de nombreuses façons d'obtenir des informations sur l'utilisation de la mémoire dans votre système Linux. Dans ce tour d'horizon, nous allons couvrir les méthodes de ligne de commande les plus couramment utilisées: free, vmstat, et top. Nous allons également regarder la lecture /proc/meminfo directement.

Comment Linux utilise la RAM

La RAM est une ressource finie dont tous les processus, comme les applications et les démons, veulent un morceau. Il n'y en a que beaucoup disponibles. Le noyau arbitre les querelles de mémoire et alloue la mémoire rationnée à tous les processus affamés. C’est un peu comme une mère oiseau avec plus de becs ouverts pointés sur elle qu’elle n’a de larve.

La RAM inutilisée est de la RAM gaspillée. Linux utilise n'importe quelle RAM disponible pour des choses comme l'espace de tampon de fichiers, pour maintenir votre ordinateur en fonctionnement à des performances optimales. Il est facile d’imprimer que la RAM de votre système a été consommée par un processus incontrôlé ou une fuite de mémoire, mais c’est rarement le cas.

C’est généralement juste le noyau qui fait son travail avec ténacité en arrière-plan. S'il y a d'autres demandes de RAM que le noyau a pochées pour ses propres appareils, il abandonne la mémoire instantanément, donc il n'y a aucun mal.

Si le noyau décide qu’il est plus efficace de commencer à utiliser l’espace de swap, il le met également en jeu. Il y a beaucoup de confusion sur le swappiness sous Linux et quand le noyau commencera à utiliser swap. Il est faux que le swappiness La valeur définit un seuil d'utilisation de la RAM qui déclenche l'activation du swap.

Mais maintenant, regardons les différentes techniques que vous pouvez utiliser dans la fenêtre du terminal pour voir l'utilisation de la RAM sur votre ordinateur Linux.

La commande gratuite

La commande gratuite vous donne un tableau du total, utilisé, libre, partagé, tampon / cache et RAM disponible sur votre ordinateur. Il vous montre également la quantité totale d'espace de swap configuré et la quantité utilisée et disponible.

Dans notre exemple, nous utiliserons le -m (mégaoctets). Cependant, vous pouvez également utiliser -b (octets), -k (kibioctets), ou -g (gibibytes).

Nous tapons la commande suivante:

free -m

Voici la sortie que nous obtenons:

      total used free shared buff/cache available
Mem:   1987  901   95     80        990       811
Swap: 1521   651  869

le Mem les colonnes contiennent les informations suivantes:

  • Total: La quantité totale de RAM physique sur cet ordinateur.
  • Utilisé: La somme de Free + Buffers + Cache soustraite du montant total.
  • Gratuit: La quantité de mémoire inutilisée.
  • partagé: Quantité de mémoire utilisée par le tmpfs systèmes de fichiers.
  • Buff / cache: Quantité de mémoire utilisée pour les tampons et le cache. Cela peut être publié rapidement par le noyau si nécessaire.
  • Disponible: Il s'agit d'une estimation de la mémoire disponible pour traiter les demandes de mémoire des applications et de tout autre logiciel opérationnel sur votre ordinateur.

le Swap les colonnes contiennent les informations suivantes:

  • Total: La taille de la partition ou du fichier d'échange.
  • Utilisé: Quantité d'espace de swap utilisé.
  • Gratuit: La quantité d'espace de swap restant (inutilisé).

Vous pouvez également utiliser l'astuce astucieuse suivante que nous avons modifiée d'un de nos lecteurs pour voir le pourcentage d'espace de swap utilisé:

free -m | grep Swap | awk '{print ($3/$2)*100}'

La commande vmstat

Il est impossible d'avoir une bonne compréhension de la façon dont la RAM est utilisée dans votre box Linux sans apprécier l'état de votre espace de swap. La RAM et l'espace d'échange fonctionnent en étroite collaboration.

Vous pouvez utiliser le vmstat pour approfondir la façon dont votre espace de swap (ou mémoire virtuelle) est utilisé. Il vous donne un rapport sur une variété de statistiques liées au swap basées sur les valeurs moyennes depuis le dernier redémarrage.

Tapez ce qui suit:

vmstat

Voici la sortie sans bouclage:

procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b    swpd    free  buff   cache   si  so    bi   bo    in   cs  us sy id wa st
3 0  671488  576084  51088  823876   1   7    53   62    99   14   4  1 95  0  0

Il y a beaucoup de points de données dans ce rapport, nous allons donc les ventiler:

  • Proc:
    • r: Le nombre de processus «exécutables». Ils sont en cours d'exécution ou attendent leur prochaine rafale de cycles CPU à tranches de temps.
    • b: Le nombre de processus dans le sommeil sans interruption. Ceux-ci ne dorment pas, mais effectuent un appel système bloquant. Ils ne peuvent pas être interrompus tant qu'ils n'ont pas terminé leur action en cours. En règle générale, ce processus est un pilote de périphérique attendant qu'une ressource soit libre. Toutes les interruptions en file d'attente pour ce processus sont gérées lorsque le processus reprend son activité habituelle.
  • Mémoire:
    • swpd: La quantité de mémoire virtuelle utilisée, c'est-à-dire la quantité de mémoire qui a été échangée.
    • gratuit: La quantité de mémoire inactive (inutilisée).
    • chamois: La quantité de mémoire utilisée comme tampons.
    • cache: La quantité de mémoire utilisée comme cache.
  • Échanger:
    • si: La quantité de mémoire virtuelle permutée depuis l'espace de permutation.
    • donc: La quantité de mémoire virtuelle permutée pour échanger de l'espace.
  • IO:
    • bi: Bloque. Nombre de blocs de données utilisés pour remplacer la mémoire virtuelle par la RAM.
    • bo: Bloque. Nombre de blocs de données utilisés pour échanger la mémoire virtuelle hors de la RAM et dans l'espace d'échange.
  • Système:
    • dans: Le nombre d'interruptions par seconde, y compris l'horloge.
    • cs: Le nombre de changements de contexte par seconde. Un changement de contexte se produit lorsque le noyau passe du système au traitement en mode utilisateur.
  • CPU: Ces valeurs sont tous des pourcentages du temps CPU total:
    • nous: Temps passé à exécuter le code utilisateur (non noyau).
    • sy: Temps passé à exécuter le code du noyau.
    • id: Temps passé inactif.
    • Washington: Temps passé à attendre l'entrée ou la sortie.
    • st: Le temps qu'une machine virtuelle doit attendre que l'hyperviseur termine la maintenance d'autres machines virtuelles avant de pouvoir revenir et s'occuper de cette machine virtuelle.

La meilleure commande

le top affiche un écran rempli d'informations. Les valeurs sont mises à jour toutes les quelques secondes.

Pour l'utiliser, nous tapons ce qui suit:

top

La touche «e» a été enfoncée. Cela a changé l'affichage en mégaoctets, qui sont plus faciles à analyser visuellement que les longues chaînes représentant des octets. Il y a cinq lignes d'informations en haut de l'écran et un volet inférieur avec des colonnes de données.

Voici les informations que vous trouverez sur chaque ligne:

  • Ligne un: L'heure, la durée de fonctionnement de l'ordinateur, le nombre de personnes connectées et la moyenne de la charge au cours des 1, 5 et 15 dernières minutes.
  • Ligne deux: Le nombre de tâches et leurs états: courir, s'arrêter, dormir ou zombie.
  • Ligne trois: Informations CPU (voir la répartition des champs ci-dessous).
  • Ligne quatre: La quantité totale de mémoire physique et la quantité disponible, utilisée, mise en mémoire tampon ou mise en cache.
  • Ligne cinq: Quantité totale de mémoire de swap et quantité disponible, utilisée et disponible (en tenant compte de la mémoire qui devrait être récupérable à partir des caches).

Les champs CPU sur la ligne trois sont les suivants:

  • nous: Temps passé par le processeur à exécuter des processus pour les utilisateurs dans l'espace utilisateur.
  • sy: Temps passé par le processeur à exécuter les processus «espace noyau» du système.
  • ni: Temps passé par le processeur à exécuter les processus avec une valeur de valeur définie manuellement.
  • id: Temps d'inactivité du processeur.
  • Washington: Temps passé par le processeur à attendre la fin des E / S.
  • salut: Temps passé par le CPU à réparer les interruptions matérielles.
  • si: Durée d'interruption du logiciel de maintenance du processeur.
  • st (temps de vol): Temps perdu par le CPU en raison de l'exécution de machines virtuelles.

Vous devrez peut-être appuyer sur les touches fléchées gauche ou droite pour voir toutes les colonnes. Les valeurs de chaque colonne sont décrites ci-dessous:

  • PID: ID de processus.
  • UTILISATEUR: Nom du propriétaire du processus.
  • PR: Processus prioritaire.
  • NI: La belle valeur du processus.
  • VIRT: Mémoire virtuelle utilisée par le processus.
  • RES: Mémoire résidente utilisée par le processus.
  • SHR: Mémoire partagée utilisée par le processus.
  • S: Statut du processus. (Voir la liste des valeurs que ce champ peut prendre ci-dessous).
  • %CPU: Part du temps processeur utilisée par le processus depuis la dernière mise à jour.
  • % MEM: La part de mémoire physique utilisée.
  • HEURE +: Temps CPU total utilisé par la tâche en centièmes de seconde.
  • COMMANDER: Le nom ou la ligne de commande (nom + options). (Cette colonne est hors écran à droite dans l'image ci-dessus.)

Le statut affiché dans le S La colonne peut être l'une des suivantes:

  • RÉ: Sommeil sans interruption.
  • R: Fonctionnement.
  • S: En train de dormir.
  • T: Tracé (arrêté).
  • Z: Zombi.

Appuyez sur Q pour quitter top.

Lecture / proc / meminfo

Beaucoup (et, probablement, la plupart) des outils sous Linux qui rapportent des statistiques de mémoire récupèrent leurs informations du pseudo système de fichiers /proc/meminfo. Nous pouvons utiliser le cat ou less commandes pour faire de même.

Nous tapons ce qui suit:

less /proc/meminfo

Vous pouvez voir différents champs en fonction du noyau en cours d'exécution et de l'architecture du processeur. Nous avons obtenu les résultats suivants sur notre machine virtuelle:

MemTotal:          2035260 kB
MemFree:            919064 kB
MemAvailable:      1300932 kB
Buffers:             33528 kB
Cached:             457604 kB
SwapCached:          29732 kB
Active:             313360 kB
Inactive:           603276 kB
Active(anon):        74648 kB
Inactive(anon):     355004 kB
Active(file):       238712 kB
Inactive(file):     248272 kB
Unevictable:            16 kB
Mlocked:                16 kB
SwapTotal:         1557568 kB
SwapFree:           873024 kB
Dirty:                  80 kB
Writeback:               0 kB
AnonPages:          414100 kB
Mapped:              97436 kB
Shmem:                4148 kB
KReclaimable:        52932 kB
Slab:                94216 kB
SReclaimable:        52932 kB
SUnreclaim:          41284 kB
KernelStack:          9280 kB
PageTables:          45264 kB
NFS_Unstable:            0 kB
Bounce:                  0 kB
WritebackTmp:            0 kB
CommitLimit:       2575196 kB
Committed_AS:      5072192 kB
VmallocTotal:  34359738367 kB
VmallocUsed:         35712 kB
VmallocChunk:            0 kB
Percpu:                720 kB
HardwareCorrupted:       0 kB
AnonHugePages:           0 kB
ShmemHugePages:          0 kB
ShmemPmdMapped:          0 kB
CmaTotal:                0 kB
CmaFree:                 0 kB
HugePages_Total:         0
HugePages_Free:          0
HugePages_Rsvd:          0
HugePages_Surp:          0
Hugepagesize:         2048 kB
Hugetlb:                 0 kB
DirectMap4k:        180160 kB
DirectMap2M:       1916928 kB

Toutes les tailles sont en kibioctets sauf indication contraire. Voici ce qu'ils signifient tous, ainsi que d'autres que vous pourriez voir en fonction de la configuration et du matériel de votre ordinateur:

  • MemTotal: RAM totale utilisable (à l'exception de quelques bits réservés et du code binaire du noyau).
  • MemFree: La somme de LowFree+HighFree. La quantité de RAM actuellement disponible.
  • MemAvailable: Estimation de la mémoire disponible pour démarrer de nouvelles applications, sans échange.
  • Tampons: Stockage temporaire pour les blocs de disque bruts. Cela réduit l'entrée et la sortie du disque dur. Il accélère également l'accès aux demandes ultérieures pour les mêmes données car elles sont déjà en mémoire.
  • En cache: Pages mises en cache lues à partir de fichiers sur le disque dur (non compris SwapCached).
  • SwapCached: Mémoire qui a été permutée et rentrée, et une copie reste dans l'espace de permutation.
  • Actif: Mémoire utilisée récemment. Elle n'est récupérée que si elle est absolument nécessaire.
  • Inactif: Mémoire utilisée, mais pas la plus récemment utilisée. C'est un candidat probable pour la remise en état.
  • Actif (anon): Mémoire allouée aux fichiers créés dans un tmpfs pseudo-système de fichiers. Les fichiers anonymes ne résident pas sur le disque dur.
  • Inactif (anon): Quantité d'anonymes, tmpfs, et shmem mémoire susceptible d'être expulsée (récupération de mémoire).
  • Actif (fichier): Quantité de mémoire cache de fichiers utilisée ou utilisée depuis le cycle de récupération de mémoire précédent.
  • Inactif (fichier): Quantité de mémoire cache de fichiers lue sur un disque dur candidat à la récupération.
  • Inévitable: Quantité de mémoire qui devrait être évitable, mais pas parce qu'elle est verrouillée en mémoire par les processus de l'espace utilisateur.
  • Mlocked: Quantité totale de mémoire non évitable car elle est verrouillée par les processus de l'espace utilisateur.
  • HighTotal: Quantité totale de HighMem, qui est utilisée par les programmes de l'espace utilisateur et le cache de page. Le noyau peut accéder à cette zone de mémoire, mais il est plus lent pour y accéder que LowMem.
  • HighFree: Montant de HighMem gratuit.
  • LowTotal: Quantité de LowMem, qui est disponible pour toutes les mêmes utilisations que HighMem, mais aussi pour le noyau à utiliser à ses propres fins.
  • LowFree: Montant de LowMem gratuit.
  • MmapCopy: Quantité de mémoire mappée aux données de fichier.
  • SwapTotal: Quantité totale d'espace de swap disponible.
  • SwapFree: Quantité d'espace de swap actuellement inutilisée.
  • Sale: Quantité de mémoire en attente d'écriture sur le disque.
  • Écriture différée: La mémoire est activement réécrite sur le disque.
  • AnonPages: Pages non sauvegardées sur fichier mappées dans des tables de pages de l'espace utilisateur.
  • Mappé: Fichiers (comme les bibliothèques) qui sont mappés en mémoire.
  • Shmem: Quantité de mémoire consommée dans tmpfs systèmes de pseudo-fichiers.
  • Récupérable: Allocations de mémoire du noyau que le noyau tentera de récupérer si la demande de mémoire est suffisamment sévère.
  • Dalle: Cache des structures de données dans le noyau.
  • SRéclamable: Quantité de Slab la mémoire qui pourrait être récupérée, comme les caches.
  • SUnreclaim: Quantité de Slab mémoire qui ne peut pas être récupérée.
  • KernelStack: Quantité de mémoire allouée aux piles du noyau.
  • PageTables: Quantité de mémoire dédiée au plus bas niveau de tables de pages.
  • Listes rapides: Étant donné que l'allocation et la suppression des tableaux de pages est une opération très fréquente, il est essentiel qu'elle soit aussi rapide que possible. Ainsi, les pages utilisées pour les tableaux de pages sont mises en cache dans un certain nombre de listes différentes appelées «listes rapides».
  • NFS_Unstable: Pages NFS (Network File System) que le serveur a reçues, mais pas encore écrites sur un stockage non volatile.
  • Rebondir: Mémoire utilisée pour les tampons de rebond de périphérique de bloc. Un tampon de rebond est positionné en mémoire suffisamment bas pour qu'un appareil puisse y accéder directement. Les données sont ensuite copiées sur la page utilisateur souhaitée dans HighMem.
  • WritebackTmp: Mémoire utilisée par le système de fichiers dans l'espace utilisateur (FUSE) pour les tampons de réécriture temporaires.
  • CommitLimit: Quantité totale de mémoire actuellement disponible à allouer dans le système.
  • Committed_AS: La quantité de mémoire estimée pour satisfaire toutes les demandes actuelles. Si un programme demande de la RAM, la demande est enregistrée, mais la RAM n'est allouée qu'une fois que le programme commence à l'utiliser. Il est également alloué uniquement selon les besoins, jusqu'à concurrence du montant maximum réservé par le programme. Plus de mémoire peut être «allouée» que ce qui peut réellement être fourni. Si tous les programmes tentent d'encaisser leurs jetons de mémoire RAM en même temps, le casino de la mémoire pourrait faire faillite (et devoir aller de pair avec les financiers de l'espace d'échange).
  • VmallocTotal: Taille totale de la zone de mémoire vmalloc.
  • VmallocUsed: Quantité de zone vmalloc utilisée. Depuis Linux 4.4, ce champ n'est plus calculé, il est codé en dur.
  • VmallocChunk: Le plus grand bloc contigu de zone vmalloc libre.
  • HardwareCorrupted: Quantité de mémoire marquée comme ayant des problèmes de corruption de mémoire physique. Il ne sera pas attribué.
  • LazyFree: Quantité de mémoire dans MADV_FREE Etat. Lorsqu'une application définit le MADV_FREE sur une série de pages, cela indique qu'il n'en a plus besoin et qu'ils sont désormais candidats à la récupération. La récupération réelle peut être retardée jusqu'à ce que la demande de mémoire soit suffisante. Si l'application commence à écrire sur des pages, la récupération peut être annulée.
  • AnonHugePages: D'énormes pages non sauvegardées dans des fichiers mappées dans des tables de pages d'espace utilisateur. Les pages non sauvegardées ne proviennent pas d'un fichier de disque dur.
  • ShmemHugePages: Quantité de mémoire utilisée par la mémoire partagée (shmem) et les systèmes de pseudo-fichiers (tmpfs) alloué avec de grandes pages.
  • ShmemPmdMapped: Quantité de mémoire partagée mappée dans l'espace utilisateur avec d'énormes pages.
  • CmaTotal: Nombre de pages CMA (Allocation de mémoire contiguë). Ils sont utilisés par des périphériques qui ne peuvent communiquer qu'avec des régions de mémoire contiguës.
  • CmaFree: Nombre de pages CMA (Allocation de mémoire contiguë) gratuites.
  • HugePages_Total: Taille énorme du pool de pages.
  • HugePages_Free: Nombre de pages énormes non allouées dans le pool.
  • HugePages_Rsvd: Nombre de pages volumineuses réservées. L'engagement d'allouer a été pris, mais aucune allocation n'a encore été effectuée.
  • HugePages_Surp: Nombre de pages énormes dans le pool au-dessus de la valeur système définie.
  • Taille énorme: Taille des pages énormes.
  • DirectMap4k: Nombre d'octets de RAM mappés sur des pages de 4 Ko.
  • DirectMap4M: Nombre d'octets de RAM mappés sur des pages de 4 Mo.
  • DirectMap2M: Nombre d'octets de RAM mappés sur des pages de 2 Mo.
  • DirectMap1G: Nombre d'octets de RAM mappés sur des pages de 2 Go.

Comme d'habitude avec Linux, il existe plusieurs façons d'obtenir un aperçu rapide, et toujours au moins une façon d'approfondir les détails.

Vous utiliserez probablement free, top, et vmstate régulièrement, et gardez /proc/meminfo en réserve pour quand vous devez faire une plongée profonde pour enquêter sur un problème particulier.