Comment ajouter de l’espace d’échange sur Ubuntu 22.04

Introduction

Une façon de se prémunir contre les erreurs de mémoire insuffisante dans les applications est d’ajouter un peu d’espace d’échange à votre serveur. Dans ce guide, nous verrons comment ajouter un fichier d’échange à un serveur Ubuntu 22.04.

Qu’est-ce que l’échange ?

L’échange est une partie du stockage du disque dur qui a été réservée pour que le système d’exploitation puisse temporairement stocker des données qu’il ne peut plus contenir dans la RAM. Cela vous permet d’augmenter la quantité d’informations que votre serveur peut conserver dans sa mémoire de travail, avec quelques précautions. L’espace d’échange sur le disque dur sera principalement utilisé lorsqu’il n’y aura plus suffisamment d’espace dans la RAM pour contenir les données d’application en cours d’utilisation.

Les informations écrites sur le disque seront nettement plus lentes que les informations conservées dans la RAM, mais le système d’exploitation préférera conserver les données d’application en cours d’exécution en mémoire et utiliser l’échange pour les anciennes données. Globalement, avoir de l’espace d’échange comme solution de secours lorsque la RAM de votre système est épuisée peut constituer un bon filet de sécurité contre les exceptions de mémoire insuffisante sur des systèmes disposant d’un stockage non SSD.

Étape 1 – Vérification du système pour les informations de swap

Avant de commencer, nous pouvons vérifier si le système dispose déjà d’un espace de swap disponible. Il est possible d’avoir plusieurs fichiers de swap ou partitions de swap, mais en général, un seul devrait être suffisant.

Nous pouvons voir si le système a un swap configuré en tapant:

  1. sudo swapon --show

Si vous n’obtenez pas de sortie, cela signifie que votre système n’a pas d’espace de swap disponible actuellement.

Vous pouvez vérifier qu’il n’y a pas de swap actif en utilisant l’utilitaire free:

  1. free -h
Output
total used free shared buff/cache available Mem: 981Mi 122Mi 647Mi 0.0Ki 211Mi 714Mi Swap: 0B 0B 0B

Comme vous pouvez le voir dans la ligne Swap de la sortie, aucun swap n’est actif sur le système.

Étape 2 – Vérification de l’espace disponible sur la partition du disque dur

Avant de créer notre fichier de swap, nous vérifierons notre utilisation actuelle du disque pour nous assurer que nous avons suffisamment d’espace. Faites ceci en entrant:

  1. df -h
Output
Filesystem Size Used Avail Use% Mounted on udev 474M 0 474M 0% /dev tmpfs 99M 932K 98M 1% /run /dev/vda1 25G 1.4G 23G 7% / tmpfs 491M 0 491M 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs 491M 0 491M 0% /sys/fs/cgroup /dev/vda15 105M 3.9M 101M 4% /boot/efi /dev/loop0 55M 55M 0 100% /snap/core18/1705 /dev/loop1 69M 69M 0 100% /snap/lxd/14804 /dev/loop2 28M 28M 0 100% /snap/snapd/7264 tmpfs 99M 0 99M 0% /run/user/1000

Le périphérique avec / dans la colonne Monté sur est notre disque dans ce cas. Nous avons beaucoup d’espace disponible dans cet exemple (seulement 1,4 Go utilisé). Votre utilisation sera probablement différente.

Bien qu’il existe de nombreuses opinions sur la taille appropriée de l’espace d’échange, cela dépend vraiment de vos préférences personnelles et des exigences de votre application. En général, un montant égal ou double de la quantité de RAM sur votre système est un bon point de départ. Une autre règle de base est que toute valeur supérieure à 4 Go d’échange est probablement inutile si vous l’utilisez simplement comme une alternative à la RAM.

Étape 3 – Création d’un fichier d’échange

Maintenant que nous connaissons l’espace disponible sur notre disque dur, nous pouvons créer un fichier d’échange sur notre système de fichiers. Nous allouerons un fichier de la taille souhaitée appelé swapfile dans notre répertoire racine (/).

La meilleure façon de créer un fichier d’échange est d’utiliser le programme fallocate. Cette commande crée instantanément un fichier de la taille spécifiée.

Comme le serveur de notre exemple dispose de 1 Go de RAM, nous allons créer un fichier de 1 Go dans ce guide. Ajustez cela selon les besoins de votre propre serveur :

  1. sudo fallocate -l 1G /swapfile

Nous pouvons vérifier que la bonne quantité d’espace a été réservée en tapant :

  1. ls -lh /swapfile
  1. -rw-r--r-- 1 root root 1.0G Apr 25 11:14 /swapfile

Notre fichier a été créé avec la bonne quantité d’espace réservée.

Étape 4 – Activation du fichier d’échange

Maintenant que nous avons un fichier de la bonne taille disponible, nous devons effectivement le transformer en espace d’échange.

Tout d’abord, nous devons verrouiller les autorisations du fichier afin que seuls les utilisateurs disposant des privilèges root puissent lire le contenu. Cela empêche les utilisateurs normaux d’accéder au fichier, ce qui aurait des implications significatives en termes de sécurité.

Rendez le fichier accessible uniquement à root en tapant :

  1. sudo chmod 600 /swapfile

Vérifiez le changement d’autorisations en tapant :

  1. ls -lh /swapfile
Output
-rw------- 1 root root 1.0G Apr 25 11:14 /swapfile

Comme vous pouvez le voir, seul l’utilisateur root a les drapeaux de lecture et d’écriture activés.

Nous pouvons maintenant marquer le fichier comme espace d’échange en tapant :

  1. sudo mkswap /swapfile
Output
Setting up swapspace version 1, size = 1024 MiB (1073737728 bytes) no label, UUID=6e965805-2ab9-450f-aed6-577e74089dbf

Après avoir marqué le fichier, nous pouvons activer le fichier d’échange, permettant à notre système de commencer à l’utiliser :

  1. sudo swapon /swapfile

Vérifiez que l’échange est disponible en tapant :

  1. sudo swapon --show
Output
NAME TYPE SIZE USED PRIO /swapfile file 1024M 0B -2

Nous pouvons vérifier à nouveau la sortie de l’utilitaire free pour corroborer nos résultats :

  1. free -h
Output
total used free shared buff/cache available Mem: 981Mi 123Mi 644Mi 0.0Ki 213Mi 714Mi Swap: 1.0Gi 0B 1.0Gi

Notre espace d’échange a été configuré avec succès et notre système d’exploitation commencera à l’utiliser selon les besoins.

Étape 5 – Rendre le Fichier d’Échange Permanent

Nos récentes modifications ont activé le fichier d’échange pour la session en cours. Cependant, si nous redémarrons, le serveur ne conservera pas automatiquement les paramètres d’échange. Nous pouvons changer cela en ajoutant le fichier d’échange à notre fichier /etc/fstab.

Sauvegardez le fichier /etc/fstab au cas où quelque chose se passerait mal :

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

Ajoutez les informations du fichier d’échange à la fin de votre fichier /etc/fstab en tapant :

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

Ensuite, nous passerons en revue quelques paramètres que nous pouvons mettre à jour pour optimiser notre espace d’échange.

Étape 6 – Optimisation des paramètres d’échange

Il existe quelques options que vous pouvez configurer qui auront un impact sur les performances de votre système lorsqu’il traite avec l’échange.

Ajustement de la propriété Swappiness

Le paramètre swappiness configure la fréquence à laquelle votre système échange des données de la RAM vers l’espace d’échange. Il s’agit d’une valeur comprise entre 0 et 100 qui représente un pourcentage.

Avec des valeurs proches de zéro, le noyau n’échangera pas de données sur le disque à moins que cela ne soit absolument nécessaire. Rappelez-vous, les interactions avec le fichier d’échange sont « coûteuses » car elles prennent beaucoup plus de temps que les interactions avec la RAM et peuvent entraîner une réduction significative des performances. Indiquer au système de ne pas trop compter sur l’échange rendra généralement votre système plus rapide.

Les valeurs proches de 100 tenteront de mettre plus de données en échange afin de libérer plus d’espace RAM. Selon le profil mémoire de vos applications ou l’utilisation de votre serveur, cela pourrait être meilleur dans certains cas.

Nous pouvons voir la valeur actuelle de swappiness en tapant :

  1. cat /proc/sys/vm/swappiness
Output
60

Pour un ordinateur de bureau, une valeur de swappiness de 60 n’est pas mauvaise. Pour un serveur, vous voudrez peut-être la rapprocher de 0.

Nous pouvons définir la swappiness sur une valeur différente en utilisant la commande sysctl.

Par exemple, pour définir la swappiness sur 10, nous pourrions taper :

  1. sudo sysctl vm.swappiness=10
Output
vm.swappiness = 10

Ce paramètre persistera jusqu’au prochain redémarrage. Nous pouvons définir cette valeur automatiquement au redémarrage en ajoutant la ligne à notre fichier /etc/sysctl.conf :

  1. sudo nano /etc/sysctl.conf

En bas, vous pouvez ajouter :

/etc/sysctl.conf
vm.swappiness=10

Enregistrez et fermez le fichier lorsque vous avez terminé.

Ajustement du paramètre de pression du cache

Une autre valeur liée que vous voudrez peut-être modifier est le vfs_cache_pressure. Ce paramètre configure combien le système choisira de mettre en cache les informations d’inode et de dentry par rapport à d’autres données.

Essentiellement, il s’agit d’accéder à des données sur le système de fichiers. C’est généralement très coûteux à rechercher et très fréquemment demandé, donc c’est une excellente chose pour votre système de mettre en cache. Vous pouvez voir la valeur actuelle en interrogeant à nouveau le système de fichiers proc :

  1. cat /proc/sys/vm/vfs_cache_pressure
Output
100

Comme il est actuellement configuré, notre système supprime trop rapidement les informations d’inode du cache. Nous pouvons définir cela sur un paramètre plus conservateur comme 50 en tapant :

  1. sudo sysctl vm.vfs_cache_pressure=50
Output
vm.vfs_cache_pressure = 50

Encore une fois, cela n’est valide que pour notre session actuelle. Nous pouvons modifier cela en l’ajoutant à notre fichier de configuration comme nous l’avons fait avec notre réglage de swappiness :

  1. sudo nano /etc/sysctl.conf

Au bas, ajoutez la ligne qui spécifie votre nouvelle valeur :

/etc/sysctl.conf
vm.vfs_cache_pressure=50

Enregistrez et fermez le fichier lorsque vous avez terminé.

Conclusion

Suivre les étapes de ce guide vous donnera un peu de marge de manœuvre dans les cas qui entraîneraient sinon des exceptions de mémoire insuffisante. L’espace d’échange peut être incroyablement utile pour éviter certains de ces problèmes courants.

Si vous rencontrez des erreurs de mémoire insuffisante (OOM), ou si vous constatez que votre système est incapable d’utiliser les applications dont vous avez besoin, la meilleure solution est d’optimiser les configurations de votre application ou de mettre à niveau votre serveur.

Source:
https://www.digitalocean.com/community/tutorials/how-to-add-swap-space-on-ubuntu-22-04