Comment ajouter de l’espace de swap sur Gnu/Linux Debian 10
I. Présentation
L’espace swap est une réservation d’espace disque utilisé lorsque le taux de mémoire physique est totalement occupé. Lorsqu’un système Linux fonctionne en dehors de son espace mémoire (appelé la RAM), les pages inactives sont alors déplacées depuis cet espace RAM vers l’espace de swap du système.
Cet espace de swap peut prendre la forme soit d’une partition de swap dédiée soit d'un fichier de swap.
REMARQUE : habituellement, lorsque l’on utilise une distribution Debian sur une machine virtuelle, aucune partition de swap n’est utilisée. On favorise plutôt l’utilisation d’un fichier de swap.
Je vous propose au travers de ce tutoriel de décrire la manière de procéder pour ajouter un espace de swap supplémentaire sur une distribution Debian 10 (aussi appelée Buster).
II. Au démarrage
Même si cela reste dans le domaine du possible, il est assez rare de disposer de multiples espaces de swap sur une même machine. Toutefois, afin de faire le point sur l’état des lieux et savoir si l’installation de votre système Debian possède déjà ou non un espace de swap actif, il suffit d’exécuter la commande suivante :
$ sudo swapon --show
Si le résultat de cette commande est vide, c’est que le système ne possède pas encore d’espace swap. Dans le cas contraire, si l’on récupère l’affichage suivant, alors vitre système Debian possède déjà son espace de swap actif :
ATTENTION : pour pouvoir activer le swap, l’utilisateur aux commandes doit disposer bien sûr des privilèges système de type sudo.
III. Création du fichier de swap
Pour l’exemple, nous allons créer un fichier de 10Gio de swap. Afin d’en créer un de plus grosse volumétrie, il suffit de remplacer la valeur 10G avec la taille de votre choix.
Nous commençons par créer le fichier devant servir d’espace de swap :
$ sudo falllocate -l 10G /swfile
REMARQUE : si la commande fallocate n’est pas installée sur le système ou que l’on reçoit un beau message d’erreur stipulant "fallocate failed : Operation not supported", on peut la remplacer par l’instruction suivante :
$ sudo dd if=/dev/zero of=/swfile bs=1024 count=10485760
Ensuite, il faut protéger ce fichier, car seul le super utilisateur root doit être en mesure de lire et d’écrire sur cet espace de swap. Il faut donc exécuter la commande ci-dessous :
$ sudo chmod 600 /swfile
Puis, on doit utiliser la commande mkswap afin d’initialiser la zone de swap sur ce même fichier :
$ sudo mkswap /swfile
Il ne reste plus alors qu’à activer ce fichier de swap en exécutant l’instruction suivante :
$ sudo swapon /swfile
Afin de rendre cet ajout définitif et permettre d’en disposer même après le prochain redémarrage, il faut éditer le fichier /etc/fstab afin d’y insérer la ligne suivante :
/swfile swap swap defaults 0 0
REMARQUE : pour s’assurer que notre nouvel espace de swap est bien actif on peut utiliser au choix l’une des commandes suivantes :
- swapon
- free
$ sudo swapon --show $ sudo free -h
Au fait, si vous estimez que votre système utilise un peu trop souvent l’espace de swap, peut-être faut-il gérer cela en réduisant un peu la valeur du paramètre noyau appelé swapiness. Ce dernier définit la fréquence d’utilisation du swap. Sa valeur peut varier de 0 à 100. Une valeur basse signifie que le noyau linux essaye de rendre l’utilisation du swapping aussi légère que possible, alors qu’une valeur haute rend l’utilisation de l’espace de swap beaucoup plus agressive.
Si pour des postes de travail ou des stations, la valeur par défaut fixée à 60 convient parfaitement, pour des serveurs en production, il est préférable de fixer une valeur beaucoup plus basse (par exemple 15 ou 20). Pour se faire, il suffit d’éditer le fichier /proc/sys/vm/swappiness pour y fixer la valeur de son choix.
Bien sûr, cela peut également être modifié directement depuis le paramétrage du noyau linux :
$ sudo sysctl vm.swappiness=15
Afin de rendre ce paramétrage persistent même après le redémarrage du système, il faut ajouter la ligne ci-dessous au fichier /etc/sysctl.conf :
vm.swappiness=10
IV. Conclusion
Maintenant, vous êtes à même d’ajuster les performances de votre machine en réglant l’utilisation du swap et éventuellement en ajoutant un nouvel espace via un fichier de swap supplémentaire. Toutefois, si vous estimez que ce fichier n’est plus utile vous pourrez toujours le supprimer en exécutant la commande suivante :
$ sudo swapoff -v /swfile
Il vous faut également éditer le fichier /etc/fstab pour supprimer aussi la ligne précédemment ajoutée et terminée par la suppression du fichier lui-même :
$ sudo rm /swfile
Merci pour ce tuto. Je me suis trompé à la première commande avec l’instruction fallocate (avec 2 L et non 3) et son option -l qui est un L et non le chiffre 1 comme je l’ai d’abord cru.
L’autre difficulté a été pour moi l’édition du fichier fstab en mode super utilisateur que j’ai d’abord ouvert avec l’explorateur et Geany, qui lui me refusait l’enregistrement. J’ai donc fait la recherche pour pouvoir éditer le fstab en mode super utilisateur et j’ai trouvé l’existence de Nano l’éditeur texte du terminal. La commande suivante a été utile : sudo nano /etc/fstab
Et j’ai pu ajouter et enregistrer la ligne que vous indiquez. L’enregistrement s’effectuant avec les touches Control O et Entrée pour confirmer : https://debian-facile.org/doc:editeurs:nano
Je laisse le réglage swappiness pour plus tard, n’étant pas certain de comprendre si le réglage par défaut sera un problème. Je suis sur LinuxCNC 2.8.0, soit Debian 10 Buster qui utilise un PREEMPT-RT patch, que je découvre aussi.
Merci pour ce super tuto.
Il a été la solution pour plusieurs de mes serveurs VPS qui plantaient régulièrement par manque de mémoire.
Comme l’hébergeur ne fourni par d’espace de swap sur ses VPS, j’installe désormais systématiquement un fichier /swfile en suivant ce tuto et je n’ai plus de problème.
Je mets le réglage swapiness à 15 dans /etc/sysctl.conf et tout se passe bien, sur tous les serveurs.
Merci encore pour cette solution. J’ai mis des mois à trouver la cause de mes plantages à répétition et soulager de trouver une solution efficace.