Généralités système Linux

Performance : Mémoire avec free et vmstat

Cet article a été mis à jour, vous consultez ici une archive de cet article!
Table des matières

Introduction



Quand un système Unix manque de mémoire, cela a des conséquences souvent catastrophiques : l'ensemble du système se met à fonctionner au ralenti jusqu'à la paralysie complète de la machine ! Le manque de mémoire est donc un problème majeur à traiter sans délai. Il faut donc avant tout être capable de repérer ce phénomène.


La commande free



Pour mesurer la consommation de la mémoire, il existe plusieurs commandes, chacune avec sa spécificité. La commande free fournit des informations détaillées sur la façon dont la mémoire est consommée :

Code BASH :
free -m
 
             total       used       free     shared    buffers     cached
Mem:          7865       4992       2872        295        334       2281
-/+ buffers/cache:       2375       5489
Swap:         8188          0       8188
 


La première ligne indique la consommation de la mémoire physique, c'est à dire celle fournie par les barrettes de mémoire :
Code BASH :
             total       used       free     shared    buffers     cached
Mem:          7865       4992       2872        295        334       2281
 


  • total indique la quantité de mémoire physique totale.
  • used indique la quantité de mémoire physique consommée par le système dans son ensemble.
  • free indique la quantité de mémoire physique inutilisée.
  • shared est obsolète et doit être ignoré.
  • buffers et cached renseignent sur la mémoire utilisée pour (essentiellement) optimiser les performances du système. Cette mémoire peut être rendue disponible à tout moment.


Dans l'exemple ci-dessus, le système dispose en tout de 7865 Mo de mémoire. Sur ce total, 4992 Mo sont utilisés et 2872 Mo sont inutilisés. A première vue, près de 5Go de mémoire sont utilisés, soit plus de 50%. Pourtant, ça n'est pas du tout le cas. Attention à ne pas confondre mémoire inutilisée et mémoire disponible !
Le système consomme un maximum de mémoire pour optimiser au mieux ses performances via l'utilisation de caches, et il n'y a donc que très peu de mémoire inutilisée (colonne free).
Mais la mémoire utilisée par les caches (colonnes buffers et cached) peut être libérée à tout moment.

La deuxième ligne indique la quantité de mémoire réellement consommée par les applications (colonne used) et la mémoire réellement disponible (colonne free) :

Code BASH :
-/+ buffers/cache:       2375       5489


En cessant d'utiliser les caches, le système ne consommerait donc plus que 2375 Mo de mémoire alors que 5489 Mo seraient disponibles. Finalement, ce serveur a encore beaucoup de mémoire disponible en réserve !

A quoi servent les buffers / cached ?

Lire un fichier, le modifier, écrire dedans... toutes ces actions ont des répercutions importantes sur les performances du système car les accès disques sont très lents comparés aux accès en mémoire. Pour minimiser les accès disques en lecture et en écriture, le noyau conserve en mémoire aussi longtemps que possible les informations lues ou écrites. Travailler sur une copie en mémoire est alors très rapide. Mais attention au crash ! Pour ne pas perdre l'ensemble de ces données en cas de panne du système, elles sont écrites sur le disque à intervalle régulier (généralement 5 secondes).


La dernière ligne indique la consommation de mémoire swap :

Code BASH :
Swap:         8188          0       8188


Le swap est une partition particulière du disque dur utilisée par le noyau pour étendre la mémoire physique. Ce besoin découle de la différence entre le prix de la mémoire qui est beaucoup plus cher que celui des disques. Pourquoi dans ce cas ne pas se servir du disque comme si c'était de la mémoire physique ? C'est exactement le rôle du swap qui permet d'étendre considérablement la mémoire utilisable par le système. En revanche les accès disques étant beaucoup plus lents, cet espace ne sera utilisé qu'en cas d’extrême nécessité, quand la mémoire physique est épuisée.

Quand le système se met à utiliser son swap (on dit alors qu'il "swappe"), les conséquences sur les performances globales du système sont très visibles car celui-ci est alors considérablement ralenti. Le swap doit donc essentiellement être vu comme une mémoire de secours, à utiliser le moins possible. Dans l'exemple ci-dessus, la colonne used avec une valeur de 0 indique que le swap n'est pas utilisé, ce qui est plutôt rassurant pour cette machine.

Notez que certains noyau utilisent une petite portion du swap pour y entreposer de façon temporaire des informations. Cela n'a rien d'alarmant tant que cette consommation est modérée et qu'il reste suffisamment de mémoire physique de libre.


La commande vmstat