Combien de mémoire est installée et utilisée sur vos systèmes Linux ?

Il existe de nombreuses façons d’obtenir des informations sur la mémoire installée sur les systèmes Linux et de visualiser la quantité de cette mémoire utilisée. Certaines commandes fournissent une quantité écrasante de détails, tandis que d’autres fournissent des réponses succinctes, mais pas nécessairement faciles à digérer. Dans ce post, nous allons examiner certains des outils les plus utiles pour vérifier la mémoire et son utilisation.

Avant d’entrer dans les détails, cependant, passons en revue quelques bases. La mémoire physique et la mémoire virtuelle ne sont pas les mêmes. Cette dernière comprend l’espace disque configuré pour être utilisé comme swap. L’espace swap peut inclure des partitions réservées à cet usage ou des fichiers créés pour ajouter à l’espace swap disponible lorsque la création d’une nouvelle partition n’est pas pratique. Certaines commandes Linux fournissent des informations sur les deux.

L’espace d’échange étend la mémoire en fournissant un espace disque qui peut être utilisé pour héberger des pages inactives qui sont déplacées sur le disque lorsque la mémoire physique se remplit.

Un fichier qui joue un rôle dans la gestion de la mémoire est /proc/kcore. Ce fichier ressemble à un fichier normal (bien qu’extrêmement volumineux), mais il n’occupe pas du tout d’espace disque. Il s’agit plutôt d’un fichier virtuel comme tous les fichiers de /proc.

$ ls -l /proc/kcore-r--------. 1 root root 140737477881856 Jan 28 12:59 /proc/kcore

Intéressant, les deux systèmes interrogés ci-dessous n’ont pas la même quantité de mémoire installée, et pourtant la taille de /proc/kcore est la même sur les deux. Le premier de ces deux systèmes a 4 Go de mémoire installée ; le second a 6 Go.

system1$ ls -l /proc/kcore-r--------. 1 root root 140737477881856 Jan 28 12:59 /proc/kcoresystem2$ ls -l /proc/kcore-r-------- 1 root root 140737477881856 Feb 5 13:00 /proc/kcore

Les explications qui prétendent que la taille de ce fichier représente la quantité de mémoire virtuelle disponible (peut-être plus 4K) n’ont pas beaucoup de poids. Ce nombre laisserait entendre que la mémoire virtuelle de ces systèmes est de 128 téraoctets ! Ce chiffre semble plutôt représenter la quantité de mémoire qu’un système 64 bits pourrait être capable d’adresser – et non la quantité disponible sur le système. Les calculs de ce à quoi ressembleraient 128 téraoctets et ce nombre, plus 4K sont assez faciles à faire sur la ligne de commande :

$ expr 1024 \* 1024 \* 1024 \* 1024 \* 128140737488355328$ expr 1024 \* 1024 \* 1024 \* 1024 \* 128 + 4096140737488359424

Une autre commande plus conviviale pour examiner la mémoire est la commande free. Elle vous donne un rapport facile à comprendre sur la mémoire.

$ free total used free shared buff/cache availableMem: 6102476 812244 4090752 13112 1199480 4984140Swap: 2097148 0 2097148

Avec l’option -g, free rapporte les valeurs en gigaoctets.

$ free -g total used free shared buff/cache availableMem: 5 0 3 0 1 4Swap: 1 0 1

Avec l’option -t, free affiche les mêmes valeurs qu’en l’absence d’options (ne confondez pas -t avec téraoctets !) mais en ajoutant une ligne de total au bas de sa sortie.

$ free -t total used free shared buff/cache availableMem: 6102476 812408 4090612 13112 1199456 4983984Swap: 2097148 0 2097148Total: 8199624 812408 6187760

Et, bien sûr, vous pouvez choisir d’utiliser les deux options.

$ free -tg total used free shared buff/cache availableMem: 5 0 3 0 1 4Swap: 1 0 1Total: 7 0 5

Vous pourriez être déçu par ce rapport si vous essayez de répondre à la question « Combien de RAM est installée sur ce système ? ». Il s’agit du même système présenté dans l’exemple ci-dessus qui était décrit comme ayant 6 Go de RAM. Cela ne signifie pas que ce rapport est faux, mais que c’est la vision du système de la mémoire dont il dispose.

La commande free offre également une option pour mettre à jour l’affichage toutes les X secondes (10 dans l’exemple ci-dessous).

$ free -s 10 total used free shared buff/cache availableMem: 6102476 812280 4090704 13112 1199492 4984108Swap: 2097148 0 2097148 total used free shared buff/cache availableMem: 6102476 812260 4090712 13112 1199504 4984120Swap: 2097148 0 2097148

Avec -l, la commande free fournit une utilisation élevée et faible de la mémoire.

$ free -l total used free shared buff/cache availableMem: 6102476 812376 4090588 13112 1199512 4984000Low: 6102476 2011888 4090588High: 0 0 0Swap: 2097148 0 2097148

Une autre option pour examiner la mémoire est le fichier /proc/meminfo. Comme /proc/kcore, c’est un fichier virtuel et un qui donne un rapport utile montrant combien de mémoire est installée, libre et disponible. Il est clair que libre et disponible ne représentent pas la même chose. MemFree semble représenter la RAM inutilisée. MemAvailable est une estimation de la quantité de mémoire disponible pour le démarrage de nouvelles applications.

$ head -3 /proc/meminfoMemTotal: 6102476 kBMemFree: 4090596 kBMemAvailable: 4984040 kB

Si vous voulez seulement voir la mémoire totale, vous pouvez utiliser l’une de ces commandes:

$ awk '/MemTotal/ {print $2}' /proc/meminfo6102476$ grep MemTotal /proc/meminfoMemTotal: 6102476 kB

Les entrées DirectMap décomposent les informations sur la mémoire en catégories.

$ grep DirectMap /proc/meminfoDirectMap4k: 213568 kBDirectMap2M: 6076416 kB

DirectMap4k représente la quantité de mémoire mappée aux pages standard de 4k, tandis que DirectMap2M montre la quantité de mémoire mappée aux pages de 2MB.

La commande getconf est une commande qui fournira un peu plus d’informations que la plupart d’entre nous veulent contempler.

$ getconf -a | moreLINK_MAX 65000_POSIX_LINK_MAX 65000MAX_CANON 255_POSIX_MAX_CANON 255MAX_INPUT 255_POSIX_MAX_INPUT 255NAME_MAX 255_POSIX_NAME_MAX 255PATH_MAX 4096_POSIX_PATH_MAX 4096PIPE_BUF 4096_POSIX_PIPE_BUF 4096SOCK_MAXBUF_POSIX_ASYNC_IO_POSIX_CHOWN_RESTRICTED 1_POSIX_NO_TRUNC 1_POSIX_PRIO_IO_POSIX_SYNC_IO_POSIX_VDISABLE 0ARG_MAX 2097152ATEXIT_MAX 2147483647CHAR_BIT 8CHAR_MAX 127--More--

Réduisez cette sortie à quelque chose de spécifique avec une commande comme celle présentée ci-dessous, et vous obtiendrez le même type d’informations fournies par certaines des commandes ci-dessus.

$ getconf -a | grep PAGES | awk 'BEGIN {total = 1} {if (NR == 1 || NR == 3) total *=$NF} END {print total / 1024" kB"}'6102476 kB

Cette commande calcule la mémoire en multipliant les valeurs de la première et de la dernière ligne de sortie comme ceci :

PAGESIZE 4096 <==_AVPHYS_PAGES 1022511_PHYS_PAGES 1525619 <==

En calculant cela indépendamment, nous pouvons voir comment cette valeur est dérivée.

$ expr 4096 \* 1525619 / 10246102476

C’est clairement une de ces commandes qui mérite d’être transformée en alias !

Une autre commande dont la sortie est très digeste est top. Dans les cinq premières lignes de la sortie de top, vous verrez quelques chiffres qui montrent comment la mémoire est utilisée.

$ toptop - 15:36:38 up 8 days, 2:37, 2 users, load average: 0.00, 0.00, 0.00Tasks: 266 total, 1 running, 265 sleeping, 0 stopped, 0 zombie%Cpu(s): 0.2 us, 0.4 sy, 0.0 ni, 99.4 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 stMiB Mem : 3244.8 total, 377.9 free, 1826.2 used, 1040.7 buff/cacheMiB Swap: 3536.0 total, 3535.7 free, 0.3 used. 1126.1 avail Mem

Et enfin une commande qui répondra à la question  » Alors, combien de RAM est installée sur ce système ? » de manière succincte :

$ sudo dmidecode -t 17 | grep "Size.*MB" | awk '{s+=$2} END {print s / 1024 "GB"}'6GB

Selon la quantité de détails que vous voulez voir, les systèmes Linux fournissent beaucoup d’options pour voir la quantité de mémoire installée sur vos systèmes et combien est utilisée et disponible.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *