A propos de la gestion de la mémoire sur les distributions Linux

En interrogeant un poste sur Linux à propos de la quantité de mémoire utilisée, j’ai eu la désagréable surprise de constater que sur les 2Go que possède le système, 1,2Go étaient occupés, alors que le serveur n’est pas réellement en production (pas de site dessus), et donc je ne comprenais pas pourquoi tant de mémoire était utilisée. J’ai donc posé la question, et les réponses que j’ai obtenu m’ont paru être d’un intérêt tout à fait assez grand pour que je les publie.

D’abord, sachez que sur Linux, la commande top renvoie la liste des processus en mémoire.

Teg m’a indiqué que :

ps -eo pmem,pid | sort -r

me donnerait la « liste des processus triés par taille en pourcentage d’occupation mémoire ».
Et que pour identifier le processus ensuite, il suffisait de faire :

ps -eaf | grep

credenhill m’a ensuite expliqué comment exporter le top dans un fichier (ce que je n’arrivait pas à faire, sans doute car le résultat de la commande contient des variables) :

Pour capturer top dans un fichier, option -b (batch) : » :

top -b -n 1

…pour trier par % mémoire plutot que CPU :

top

F puis n

Ensuite, c’est Hoper qui m’a expliqué ce que représentaient les 1,2Go de mémoire utilisée :

Ce ne sont que les buffers qui occupent de la place… Bref, la ram n’est pas du tout « occupée » au sens ou tu l’entend. Pour comprendre :

free -m

Ce qui m’a permit de comprendre, avec mon serveur, la taille « utilisée », et la taille buffer :

coucou:# free -m
total used free shared buffers cached
Mem: 1999 1163 835 0 20 958
-/+ buffers/cache: 185 1813
Swap: 1913 0 1913

Je croyais que le 185 représentait la quantité de buffers. En fait non ! C’est ce qu’il reste quand on a enlevé les buffers 🙂

Teg a ensuite très bien expliqué ce que représentait le buffer :

Ce sont les données qui ont été chargées en mémoire à un certain moment puis qui ont été libérées car ne sont plus utilisées.
Elles sont gardées dans la mémoire si celle-ci n’est pas pleine ce qui permet de récupérer ces données si elles sont de nouveau à charger sans les transférer du disque dur à la mémoire.

ex : Le démarrage d’OpenOffice est « long » la première fois. Les données sont chargées en mémoire. Après fermeture d’OpenOffice les données sont « bufferisées ». Le démarrage suivant d’OpenOffice est plus rapide car réutilise les données « bufferisées » présentes dans la mémoire.

Et Hoper en a rajouté une (utile) couche :

quelles sont ces données qui sont là ?

Ça peut être tout et n’importe quoi. Surtout du cache file système je pense (donc des fichiers qui ont étés lus, soit parce que c’était vraiment nécessaire, soit parce que l’OS à jugé que tu allais peut être en avoir besoin).
Dans tout les cas la grosse différence c’est que ces 1,2 Go de ram ne sont pas du tout important. Si un programme demande une allocation mémoire, une partie de ces 1,2 Go pourra lui être immédiatement affecté. Alors que les 185 Mo eux sont vraiment utilisés par des programmes qui sont en train de tourner etc.

Je les remercie vraiment : j’aurais beaucoup aimé avoir de telles explications lors de ma formation en informatique, mais à l’évidence, celles-ci n’étaient pas jugées d’un intérêt suffisant pour en souffler mot aux élèves.

Laisser un commentaire

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

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.