Dernière mise à jour le 09/03/2023 à 11:08 am
Certains fournisseurs VPS ne mettent pas en place de partition swap sur leurs machines et même si cela ne pose en général aucun problème il peut arriver que vous utilisiez trop de RAM. Dans ce cas le processus OOM Killer prend le relais et tuera des processus afin de libérer de la mémoire et stabiliser le système. Dans ce cas vous avez trois possibilités :
- Utiliser moins de RAM (pas cool si le besoin est la)
- Payer un peu plus cher le VPS pour avoir un peu plus de RAM (Solution fiable mais qui peut se montrer onéreuse sur les grosses infrastructures doté de nombreux VPS)
- Ajouter un fichier swapfile (Il faut de l’espace sur le disque, donc sur les très petits VPS peux ne pas être une solution)
Cette procédure va être réalisée sous Debian 11 mais reste valable pour beaucoup d’usage.
Vérification préliminaires
On va commencer par vérifier qu’aucun SWAP n’est déjà présent, il est en effet possible de n’avoir qu’un seul swap à la fois. Pour ce faire on va utiliser les commandes swapon -s et free -m :
swapon -s
free -m
root@vps:~# swapon -s
root@vps:~# free -m
total utilisé libre partagé tamp/cache disponible
Mem: 1937 337 69 0 1530 1435
Partition d'échange: 0 0 0
On peux voir ci dessus qu’il n’y à pas de swap (aucun retour de la commande swapon), l’utilisation RAM est bonne sur ce VPS (<25%), et le processus OOM Killer n’a jamais tué le moindre processus, le fichier swap ne sera donc pas forcément utile, cela est juste un exemple.
Pensez a bien vérifier la volumétrie libre sur votre VPS avant de passer à la suite via la commande df -h par exemple.
df -h
root@vps:~# df -h
Sys. de fichiers Taille Utilisé Dispo Uti% Monté sur
udev 960M 0 960M 0% /dev
tmpfs 194M 776K 193M 1% /run
/dev/sda1 20G 9,8G 9,1G 52% /
tmpfs 969M 0 969M 0% /dev/shm
tmpfs 5,0M 0 5,0M 0% /run/lock
/dev/loop2 117M 117M 0 100% /snap/core/14447
/dev/loop5 64M 64M 0 100% /snap/core20/1822
/dev/loop3 44M 44M 0 100% /snap/certbot/2772
/dev/loop0 117M 117M 0 100% /snap/core/14784
/dev/loop6 64M 64M 0 100% /snap/core20/1828
/dev/loop4 44M 44M 0 100% /snap/certbot/2836
tmpfs 194M 4,0K 194M 1% /run/user/1001
Création du fichier swap
Ici le besoin étant faible le fichier swap qui sera créé sera de 1Go. On commence par créer le fichier
fallocate -l 1G /swapfile
ls -lah /swapfile
root@vps:~# fallocate -l 1G /swapfile
root@vps:~# ls -lah /swapfile
-rw-r--r-- 1 root root 1,0G 9 mars 10:40 /swapfile
Le fichier swapfile a bien été créé à la racine du linux, si la création du fichier échoue avec fallocate il reste possible de créer le fichier via dd directement (Pour un swap plus grand que 1G c’est le count qu’il faut modifier) :
dd if=/dev/zero of=/swapfile bs=1G count=1 status=progress
ls -lah /swapfile
root@vps:~# dd if=/dev/zero of=/swapfile bs=1G count=1 status=progress
1073741824 octets (1,1 GB, 1,0 GiB) copiés, 2 s, 505 MB/s
1+0 enregistrements lus
1+0 enregistrements écrits
1073741824 octets (1,1 GB, 1,0 GiB) copiés, 2,15198 s, 499 MB/s
root@vps:~# ls -lah /swapfile
-rw-r--r-- 1 root root 1,0G 9 mars 10:43 /swapfile
Activation du swap
Le fichier swap doit être en lecture écriture par uniquement l’utilisateur root, pour ce faire la commande chmod va être utilisée
chmod 600 /swapfile
ls -lah /swapfile
root@vps:~# chmod 600 /swapfile
root@vps:~# ls -lah /swapfile
-rw------- 1 root root 1,0G 9 mars 10:43 /swapfile
On va désormais faire du swapfile un vrai fichier swap
mkswap /swapfile
root@vps:~# mkswap /swapfile
Setting up swapspace version 1, size = 1024 MiB (1073737728 bytes)
no label, UUID=0157371f-7e22-4171-ac38-d1d7fe120ed6
On peut désormais activer le fichier swap et valider celui ci
swapon /swapfile
swapon -s
root@vps:~# swapon -s
root@vps:~# swapon -s
Filename Type Size Used Priority
/swapfile file 1048572 0 -2
root@smtp:~#
Rendre le swap persistant au redémarrage
Pour rendre persistant le tout, se rendre dans le fichier fstab et y ajouter la ligne suivante en fin de fichier
/swapfile none swap sw 0 0
Pour le faire sans avoir a éditer le fichier, on peut utiliser la commande suivante, elle réaliser la sauvegarde du fichier fstab puis injecte la ligne en fin de fichier
cp /etc/fstab /etc/fstab.bak && echo '/swapfile none swap sw 0 0' | tee -a /etc/fstab
On peux ensuite valider que la commande s’est bien déroulée :
root@vps:~# cat /etc/fstab
# /etc/fstab: static file system information.
UUID=f5cf0f50-2c77-4d02-8d10-b2e58ac73414 / ext4 errors=remount-ro 0 1
/swapfile none swap sw 0 0
Bonus, la compil des commandes
Si vous avez besoin de réaliser cela sur de nombreux serveurs vous pouvez coller le bloc de commande ci dessous. Veilliez juste a faire les vérifications préliminaires avant :
fallocate -l 1G /swapfile
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
swapon -s
cp /etc/fstab /etc/fstab.bak && echo '/swapfile none swap sw 0 0' | tee -a /etc/fstab
root@vps:~# swapon -s
Filename Type Size Used Priority
/swapfile file 1048572 0 -2
root@vps:~# free -m
total utilisé libre partagé tamp/cache disponible
Mem: 1937 326 994 0 615 1443
Partition d'échange: 1023 0 1023
root@smtp:~#