KB N°2759 : LA MÉMOIRE SOUS LINUX
Les serveurs utilisent beaucoup de mémoire vive, nous allons expliquer les raisons de ce phénomène.
CONTEXTE
La gestion de la mémoire sous Linux est souvent source de questions et d’inquiétudes.
En effet, on se retrouve fréquemment avec un serveur utilisant beaucoup de sa mémoire vive.
Le but de cet article sera donc d’expliquer les raisons de ce phénomène ainsi que donner quelques pistes afin de pouvoir vérifier si cette utilisation a un impact sur les performances de votre serveur.
Il vous permettra de mieux appréhender le fonctionnement de la mémoire et les outils pour l’optimiser.
Les différents espaces de mémoires
Nous allons dans un premier temps faire un rapide tour d’horizon sur les différentes mémoires d’un système LINUX.
- Used : la mémoire utilisée par les processeurs et le noyau.
- Free : la mémoire qui est disponible.
- Shared : la mémoire qui est partagée par plusieurs processus en même temps. Elle est inclue dans la mémoire « used ». La mémoire partagée contient également le code des processus qui sont lancés plusieurs fois. Le code n’est chargé qu’une seule fois en mémoire. Il est donc difficile d’analyser la place exacte prise par un processus dès qu’il utilise de la mémoire partagée.
- Bufered/cache : elle accélère les accès disques et fichiers. L’espace qu’elle occupe est disponible pour d’autres processus en cas de besoin. Nous attirons votre attention sur le fait que plus la mémoire disponible est faible, moins le mécanisme de cache disque sera efficace. Tous les SGBD se basent sur ce mécanisme pour accélérer leurs traitements. Donc si toute la mémoire est utilisée, il n’y a plus de possibilité de faire du cache, et chaque accès disque est plus coûteux
- SWAP : Si des processus sont inoccupés, ils peuvent être transférés dans le SWAP et libérer de la mémoire vive. Ce n’est pas un problème tant que la machine n’est pas à cours de mémoire. Cela permet de libérer de la place pour des processus qui en auraient plus besoin, ou pour le cache disque. La SWAP prend également le relais quand la quasi-totalité de la RAM est utilisée.
Le fonctionnement de la mémoire
Linux évite le gaspillage de mémoire, c’est pour ça qu’il emploie un maximum de RAM afin d’en optimiser l’usage. Les processus basculent sur la SWAP quand la valeur configurée dans la swapiness est atteinte (en %).
Pour connaître cette valeur il faudra taper la commande ⇒
cat /proc/sys/vm/swappiness :
Utilisateur1:~/$ cat /proc/sys/vm/swappiness
60
Dans cet exemple dès qu’il restera 60 % de RAM de disponible, les processus basculeront sur la SWAP.
Une SWAP trop utilisée générera des lenteurs sur la machine.
En bref :
Linux utilise le plus de RAM possible même si peu de logiciels tournent, afin d’optimiser les performances. Si la RAM est saturée (swapiness atteint), des processus basculent sur la SWAP. Si la SWAP est trop chargée, le système subira des lenteurs.
Les outils
Il existe différents outils pour vous permettre d’analyser et d’optimiser les performances de votre mémoire que nous allons vous faire découvrir dans cette partie:
- HTOP : se lance en exécutant la commande : htop
Si le message suivant apparaît :
root@olfeo-1:/# htop
bash: htop: command not found
Il vous faudra installer HTOP de la façon suivante ⇒
apt-get update ⇒ pour mettre les dépôts a jour
apt-get install -y htop ⇒ lancer l’installation
Une fois la commande HTOP de lancée :
Dans la partie haute de l’interface on peut voir l’utilisation du CPU en pourcentage: de 1 a x (x= nombre de proc)
L’utilisation de la mémoire en Mo par rapport à la totalité de mémoire disponible ainsi que la mémoire swap utilisée.
- La mémoire used apparaît en vert
- La mémoire free apparaît en noir ou gris
- La mémoire Buffers/cached apparaît en bleu et jaune
Le temps depuis lequel le système est démarré est également indiqué.
Ensuite, un « tableau » listant les processus est présenté où vous pouvez retrouver une multitude d’information (l’utilisateur qui l’a exécuté, le pourcentage de mémoire et de CPU qu’il utilise ainsi que la commande qui sert à l’exécuter).
Pour finir, dans la partie basse un menu explique les différentes actions qui sont disponibles.
- FREE :
La commande FREE permet d’afficher l’état de la mémoire RAM du système, elle possède plusieurs options.
La commande free affiche un résultat tel que : root@olfeo-1:/#free
Total | Used | Free | Shared | Buff/Cache | Available | |
Mem : | 16394968 | 8288476 | 2295200 | 312220 | 5811292 | 7456012 |
Swap : | 16691196 | 0 | 16691196 |
La RAM et la SWAP sont séparés en plusieurs colonnes qui représentent les différents états expliqués précédemment. La commande FREE possède quelques options pour adapter vos résultats :
free -M⇒ Pour afficher les resultats en Mo
free -k ⇒ Pour afficher les résultats en Ko
free -t ⇒ pour afficher le total swap +ram
ÉTAPES
Les commandes utiles
Après avoir analysé l’état de votre mémoire et constaté certaines incohérences, vous aurez sûrement besoin d’exécuter les commandes suivantes :
Modifier la SWAPINESS⇒ sysctl vm.swappiness=10
Activez et désactivez la partition SWAP pour que le paramétrage soit pris en compte.
Cette modification sera effective uniquement jusqu’au prochain reboot du système
Pour modifier la SWAPINESS de façon permanente⇒
Ajoutez la ligne suivante au fichier /etc/sysctl.conf
vim /etc/sysctl.conf`
vm.swappiness=10`
Vider le cache mémoire ⇒
`sysctl -w vm.drop_caches=3`
Activer et désactiver la partition de SWAP ⇒
- Connaître les partitions de SWAP montées en Go: swapon –show SIZE
root@olfeo-1:/#swapon –show SIZE
NAME TYPE SIZE USED PRIO
/dev/dm-1 partition 15,9G 0B -1
- Démontez les partitions de SWAP: swapoff -av (Faire cette manipulation vide le contenu de la swap dans la RAM, il faut donc que la free > SWAP utilisée )
root@olfeo-1:/#swapoff -av
swapoff /dev/dm-1
- Remontez les partitions de SWAP: `swapon -av`
root@olfeo-1:/#swapon -av
swapon: /dev/mapper/aparolari–vg-swap_1: found signature [pagesize=4096, signature=swap]
swapon: /dev/mapper/aparolari–vg-swap_1 : taille de page : 4096, taille d’espace d’échange : 17091788800, taille de périphérique : 17091788800
swapon /dev/mapper/aparolari—vg-swap₁
Pour conclure, le fait que votre RAM soit utilisée dans sa quasi-totalité n’est pas forcément signe de mauvais fonctionnement ou de ralentissement.
En revanche la SWAP ne doit jamais être remplie sous peine de ralentir le système.