Linux : créer un fichier d’échange (swap) pour optimiser un VPS

De temps en temps, on me demande de configurer des serveurs dédiés ou des VPS. Dernièrement, j’ai travaillé sur un VPS qui n’avait pas de fichier swap et qui finissait par consommer toute la RAM disponible.

Ce tutoriel vous permet de mettre en place un fichier swap sous Ubuntu 16.04 Server.

Le fichier swap

Le moyen le plus simple d’avoir un serveur réactif et de le prémunir contre les erreurs out-of-memory des services est d’allouer un fichier swap.

Le swap est une zone du disque dur spécialement créée pour que le système d’exploitation y garde des données temporaires qu’il ne peut plus stocker dans la RAM.

Cet espace permet donc aux services du serveur de continuer de tourner même lorsque la RAM est épuisée et ne sera utilisé que dans ce cas de figure.

Les informations seront cependant écrites sur le disque beaucoup moins rapidement que via la RAM.

Vérification du swap sur le système

Commençons par vérifier si un fichier de swap est déjà en place :

swapon --show

Aucun résultat : le système n’a pas d’espace réservé pour le fichier d’échange.

On vérifie une nouvelle fois s’il existe un fichier de swap actif:

free -h

Résultat:

                        total        used        free      shared  buff/cache   available
Mem:           3.9G        517M        2.5G         76M        895M        3.0G
Swap:            0B          0B          0B

Pas de swap actif sur notre système, nous allons donc pouvoir en ajouter une.

Vérification de l’espace disponible

Il est très commun de créer une nouvelle partition qui contient le fichier d’échange mais comme il n’est pas toujours possible de changer le schéma de partition, nous allons créer un fichier d’échange qui résidera sur notre partition existante.

Vérifions l’espace disponible :

df -h

Résultat:

Filesystem      Size  Used Avail Use% Mounted on
udev            2.0G     0  2.0G   0% /dev
tmpfs           396M  3.2M  393M   1% /run
/dev/vda1        59G   13G   45G  22% /
tmpfs           2.0G     0  2.0G   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           2.0G     0  2.0G   0% /sys/fs/cgroup
tmpfs           396M     0  396M   0% /run/user/0

Le disque dur se trouve sous /dev dans notre cas.

En ce qui concerne la taille de la partition swap : elle ne doit pas dépasser 4 Go (parce qu’au-delà, c’est inutile) et doit correspondre à peu près à la taille de votre RAM (ou le double de votre RAM suivant votre serveur).

Création du fichier d’échange

Nous allons donc créer un fichier d’échange nommé swapfile, d’une taille de 4 Go, à la racine du système (/).

sudo fallocate -l 4G /swapfile

Par souci de sécurité, ce fichier sera uniquement lisible par l’utilisateur root :

sudo chmod 600 /swapfile

Vérifions les permissions et l’espace réservé :

ls -lh /swapfile

Résultat:

-rw------- 1 root root 4.0G Jan 17 16:31 /swapfile

Activation du fichier d’échange

Nous activons le fichier d’échange:

sudo mkswap /swapfile

et ensuite :

sudo swapon /swapfile

Vérifions l’espace de swap disponible:

sudo swapon --show

Résultat:

NAME      TYPE SIZE USED PRIO
/swapfile file   4G 2.7M   -1

Le système peut désormais utiliser le fichier de swap mais cela n’est valide que pour cette session : au redémarrage du serveur, les réglages de notre fichier d’échange seront effacés.

Nous allons donc rendre les changements permanents en ajoutant notre fichier d’échange au fichier /etc/fstab.

Commençons d’abord par sauvegarder le fichier au cas où:

sudo cp /etc/fstab /etc/fstab.bak

et ajoutons le swap à la fin du fichier /etc/fstab:

echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

Optimisation des réglages du swap

Il existe deux réglages importants : le swappiness et le cache pressure.

Le swappiness configure la fréquence du système à sortir des données de la RAM pour les mettre dans le swap. Plus la valeur est proche de zéro, et plus les opérations sont gérées par la RAM, donc traitées rapidement. Il faut donc indiquer une valeur assez basse. La valeur par défaut est 60, on la met à 10 sur le serveur :

sudo sysctl vm.swappiness=10

Le second réglage est vfs_cache_pressure, qui configure combien le système supprime les informations inode et dentry par rapport aux autres données. La valeur d’origine est 100, on la passe à 50 pour éviter que le système ne supprime les informations relatives aux inodes du cache trop rapidement :

sudo sysctl vm.vfs_cache_pressure=50

Pour rendre les deux changements permanents:

sudo nano /etc/sysctl.conf

et ajouter en fin de fichier :

vm.swappiness=10
vm.vfs_cache_pressure=50

Sauvegardez le fichier.

Conclusion

Cela devrait vous permettre d’avoir un peu plus de liberté pour les applications gourmandes en mémoire et éviter les erreurs OOM (Out of Memory). Si cela ne suffit pas, il faudra penser à allouer plus de ressources matérielles au serveur.

Rencontrez-vous des défis avec votre site WordPress ou WooCommerce? Laissez-moi les résoudre pour vous.

Discutons des solutions possibles »

Articles conseillés :

3 pensées sur “Linux : créer un fichier d’échange (swap) pour optimiser un VPS”

  1. Merci, j’avais un VPS un peu plus “performant” que dans l’exemple mais il n’était pas suffisant pur autant.
    Maintenant je n’ai plus de problèmes de mémoire.

    Reply

Opinions