Chez Ptit Gars

Accueil > Informatique > Linux > Gestion de la mémoire

Gestion de la mémoire

mardi 6 mai 2008, par Pti Gars

Le premier réflexe, lorsque l’on veut obtenir des informations sur la mémoire, consiste à utiliser la commande free. Or, en approfondissant un peu, vous vous apercevrez très vite que les informations affichées ne se montrent pas forcément d’une grande clarté pour les non initiés. Nous allons donc étudier différentes commandes permettant d’obtenir ces informations que nous allons utiliser à chaque fois dans un script chargé de présenter les informations de manière plus pertinente

Avant de commencer, il faut comprendre de quelle manière Linux gère la mémoire vive. Il l’utilise pour le noyau, pour lancer les applications mais aussi pour stocker les buffers et les caches. Or l’espace utilisé par les caches se trouve libéré si un programme en a besoin. Dans tous les listings qui vont suivre, nous afficherons donc trois informations : la quantité de mémoire totale, la quantité de mémoire libre et la quantité de mémoire disponible, laquelle correspond tout simplement à la mémoire libre plus celle utilisée par les caches.

Le fichier /proc/meminfo

Le fichier /proc/meminfo est mis à jour en permanence par le noyau Linux et contient toutes les informations sur la mémoire au moment où vous affichez son contenu. Comme la plupart des fichiers contenus dans ce répertoire, il sert de base à certaines commandes qui se contentent d’afficher les informations ad hoc… tout comme notre premier code source :

#!/bin/bash
total=`echo $(grep MemTotal: /proc/meminfo) | cut -d' ' -f2`
libre=`echo $(grep MemFree: /proc/meminfo) | cut -d' ' -f2`
buffers=`echo $(grep Buffers: /proc/meminfo) | cut -d' ' -f2`
cached=`echo $(grep Cached: /proc/meminfo) | cut -d' ' -f2`
dispo=$(($libre+$buffers+$cached))
echo "Memoire totale     : $total Ko"
echo "Memoire libre      : $libre Ko"
echo "Memoire disponible : $dispo Ko"

La commande free

La commande free se borne à lire les informations du fichier /proc/meminfo et à les afficher. Vous pouvez utiliser certaines options pour choisir l’unité d’affichage des valeurs (-b pour octets, -k pour kilooctets et -m pour mégaoctets), supprimer l’affichage des valeurs ajustées en fonction du cache avec -o, afficher un total général via -t mais aussi rafraichir périodiquement les informations avec -s secs. Nous allons l’utiliser dans ce second code source qui se montre plus exploitable en raison de l’utilisation d’un affichage en mégaoctets :

#!/bin/bash
free -m > /tmp/l2.tmp
texte=`cat /tmp/l2.tmp | grep Mem:`
total=`echo $texte | cut -d' ' -f2`
libre=`echo $texte | cut -d' ' -f4`
texte=`cat /tmp/l2.tmp | grep cache:`
dispo=`echo $texte | cut -d' ' -f4`
rm -f l2.tmp
echo "Memoire totale     : $total Mo"
echo "Memoire libre      : $libre Mo"
echo "Memoire disponible : $dispo Mo"

La commande procinfo

Même si la commande procinfo ne s’avère pas d’une grande utilité dans ce contexte puisque son affichage correspond à celui de la commande précédente, elle présente l’avantage d’afficher d’autres informations extraites elles-aussi du répertoire /proc. En effet, vous pourriez, avec son aide, surveiller l’utilisation du processeur, le temps de connexion des utilisateurs, etc.
La commande top

Dernière commande permettant de connaître l’état de votre mémoire, top vous donne aussi de nombreuses autres informations et notamment la consommation mémoire des principaux processus. Celle-ci présente donc l’avantage de pouvoir fournir l’affichage précédent mais aussi la consommation en mémoire de certains processus, comme vous le montre le code source ci-dessous. Celui-ci se montre beaucoup plus complexe et nécessite donc quelques explications : pour commencer, nous testons le nombre d’arguments fournis lors de l’appel. S’il n’y en a aucun, l’effet se montre identique aux programmes précédents, alors que dans le cas contraire, nous recherchons les numéros de processus correspondants que nous passons à la commande ps par l’intermédiaire de l’option -p.


Liste du materiel

pour lister les caractéristique de la mémoire (méteriel) la commande magique est :

dmidecode -t memory

Voir en ligne : Orelly