La consommation mémoire de nos serveurs est une préoccupation récurrente et essentielle. Voici les commandes que j'utilise habituellement sur les plates-formes Linux (dans mon cas, du RedHat Enterprise Linux, mais c'est assez générique).

Pour les habitués de Solaris, le point le plus notable sera sans contexte l'absence de réservation directe de mémoire dans le swap : tant qu'on ne s'en sert pas réellement, le swap ne sera pas considéré comme utilisé.

top

Le grand classique, top, permet d'avoir une visibilité globale de la mémoire consommée réellement. La première des deux lignes extraites de l'affichage de cette commande indique, dans l'ordre :

  • la mémoire physique totale de la machine
  • la mémoire physique utilisée, cache filesystem compris
  • la mémoire physique disponible
  • le cache des buffers, qui est un indicateur qui ne présente plus guère d'intérêt

La seconde ligne indique, dans l'ordre :

  • la taille totale de l'espace de swap de la machine
  • l'espace utilisé dans le swap
  • l'espace disponible dans le swap
  • l'espace mémoire occupé par le cache filesystem, c'est-à-dire l'espace utilisé en mémoire pour accélérer les accès aux filesystems
# top [...] Mem:  22614736k total,  8782700k used, 13832036k free,   152552k buffers Swap: 16777208k total,        0k used, 16777208k free,  6546180k cached [...]

free

Une autre façon de voir ces informations est d'utiliser la commande free. Cette commande présente l'avantage notable de présenter également la mémoire utilisée/disponible en comptabilisant le cache filesystem en tant que mémoire disponible (ce qui est en pratique le cas, puisque les processus sont prioritaires sur le cache filesystem pour l'utilisation de la mémoire). On constate dans l'affichage ci-dessous que sur 8595 Mo utilisés, 6403 le sont par le cache (et 161 par les buffers). En soustrayant ces deux valeurs, on tombe bien (à l'arrondi près) sur la valeur "used" indiquée sur la ligne -/+ buffers/cache.

# free -m total used free shared buffers cached Mem: 22084 8595 13489 0 161 6403 -/+ buffers/cache: 2030 20054 Swap: 16383 0 16383

/proc

Enfin, on peut observer ces mêmes valeurs dans /proc. On notera ici une valeur particulière, le Commited_AS, qui est une estimation de toute la mémoire allouée (mais pas forcément encore utilisée) par les processus actifs. Ainsi,  pour un processus ayant alloué un segment mémoire par malloc( ) mais n'ayant pas encore écrit de données à cette adresse, l'espace n'apparaîtra pas dans le "used", mais on le verra dans le Committed_AS.

# cat /proc/meminfo MemTotal:     22614736 kB MemFree:      14005928 kB Buffers:        149096 kB Cached:        6566472 kB [...] SwapTotal: 16777208 kB SwapFree: 16777208 kB [...] Committed_AS: 13891488 kB

Enfin, on peut également voir les espaces de swap utilisés dans /proc :

# cat /proc/swaps Filename Type Size Used Priority /dev/mapper/lv-swap partition 16777208 0 -1