Une façon de se prémunir contre les erreurs de mémoire dans les applications est d’ajouter un espace swap à votre serveur. Dans ce guide, nous verrons comment ajouter un fichier swap à un serveur Ubuntu 20.04.
Warning : Bien que le swap soit généralement recommandé pour les systèmes utilisant des disques durs tournants traditionnels, le fait de placer le swap sur des SSD peut entraîner des problèmes de dégradation du matériel au fil du temps. Pour cette raison, nous ne recommandons pas de permettre le swap sur DigitalOcean ou tout autre fournisseur qui utilise le stockage SSD.
Le swap est une partie du stockage du disque dur qui a été mise de côté pour que le système d’exploitation puisse stocker temporairement les données qu’il ne peut plus conserver en mémoire vive. Cela vous permet d’augmenter la quantité d’informations que votre serveur peut conserver dans sa mémoire de travail, avec quelques réserves. L’espace swap sur le disque dur sera utilisé principalement lorsque l’espace en mémoire vive ne sera plus suffisant pour contenir les données des applications en cours d’utilisation.
Les informations écrites sur le disque seront nettement plus lentes que celles conservées dans la mémoire vive, mais le système d’exploitation préférera conserver les données des applications en mémoire et utiliser le swap pour les données plus anciennes. Dans l’ensemble, le fait de disposer d’un espace swap comme solution de repli lorsque la mémoire vive de votre système est épuisée peut constituer un bon filet de sécurité contre les exceptions de sortie de mémoire sur les systèmes disposant d’un stockage non-SSD.
Avant de commencer, nous pouvons vérifier si le système dispose déjà d’un espace swap disponible. Il est possible d’avoir plusieurs fichiers swap ou partitions swap, mais en général, un seul devrait suffire.
Nous pouvons voir si le système dispose d’un échange configuré en tapant :
- sudo swapon --show
Si vous ne récupérez pas les résultats, cela signifie que votre système ne dispose pas actuellement d’espace swap disponible.
Vous pouvez vérifier qu’il n’y a pas de swap actif en utilisant l’utilitaire free
:
- 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 du résultat, aucun swap n’est actif sur le système.
Avant de créer notre fichier swap, nous vérifierons notre utilisation actuelle du disque pour nous assurer que nous avons suffisamment d’espace. Faites ceci en entrant :
- df -h
OutputFilesystem 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
L’appareil avec /
dans la colonne Mounted on
est ici notre disque. Nous avons beaucoup d’espace disponible dans cet exemple (seulement 1,4 G utilisé). Votre usage sera probablement différent.
Bien qu’il existe de nombreuses opinions sur la taille appropriée d’un espace swap, cela dépend vraiment de vos préférences personnelles et des exigences de votre demande. En général, une quantité égale ou double de la quantité de mémoire vive de votre système est un bon point de départ. Une autre bonne règle de base est que tout ce qui dépasse 4G de swap est probablement inutile si vous l’utilisez simplement comme solution de repli de la RAM.
Maintenant que nous connaissons l’espace disponible sur notre disque dur, nous pouvons créer un fichier swap sur notre système de fichiers. Nous allons attribuer un fichier de la taille que nous voulons appelé swapfile
dans notre répertoire root (/
).
Le meilleur moyen de créer un fichier swap est le programme fallocate
. Cette commande crée instantanément un fichier de la taille spécifiée.
Comme le serveur de notre exemple a 1G de mémoire vive, nous allons créer un fichier de 1G dans ce guide. Ajustez cela pour répondre aux besoins de votre propre serveur :
- sudo fallocate -l 1G /swapfile
Nous pouvons vérifier que la quantité d’espace correcte a été réservée en tapant :
- ls -lh /swapfile
- -rw-r--r-- 1 root root 1.0G Apr 25 11:14 /swapfile
Notre dossier a été créé avec la bonne quantité d’espace réservé.
Maintenant que nous disposons d’un fichier de la bonne taille, nous devons le transformer en espace swap.
Tout d’abord, nous devons verrouiller les permissions du fichier afin que seuls les utilisateurs ayant les privilèges root puissent en lire le contenu. Cela empêche les utilisateurs normaux de pouvoir accéder au fichier, ce qui aurait des implications importantes en matière de sécurité.
Rendre le fichier accessible uniquement au root en tapant :
- sudo chmod 600 /swapfile
Vérifiez la modification des autorisations en tapant :
- ls -lh /swapfile
Output-rw------- 1 root root 1.0G Apr 25 11:14 /swapfile
Comme vous pouvez le voir, seul le root user a les drapeaux de lecture et d’écriture activés.
Nous pouvons maintenant marquer le fichier comme espace swap en tapant :
- sudo mkswap /swapfile
OutputSetting 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 swap, ce qui permet à notre système de commencer à l’utiliser :
- sudo swapon /swapfile
Vérifiez que le swap est disponible en tapant :
- sudo swapon --show
OutputNAME TYPE SIZE USED PRIO
/swapfile file 1024M 0B -2
Nous pouvons vérifier à nouveau les résultats de l’utilitaire free
pour corroborer nos conclusions :
- 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 swap a été mis en place avec succès et notre système d’exploitation commencera à l’utiliser si nécessaire.
Nos récents changements ont permis d’activer le fichier swap pour la session en cours. Cependant, si nous redémarrons, le serveur ne conservera pas automatiquement les paramètres du swap. Nous pouvons changer cela en ajoutant le fichier swap à notre fichier /etc/fstab
.
Sauvegardez le fichier /etc/fstab
au cas où quelque chose n’irait pas :
- sudo cp /etc/fstab /etc/fstab.bak
Ajoutez les informations du fichier swap à la fin de votre fichier /etc/fstab
en tapant :
- echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
Ensuite, nous allons revoir certains paramètres que nous pouvons mettre à jour pour régler notre espace swap.
Il existe quelques options que vous pouvez configurer et qui auront un impact sur les performances de votre système lors de la gestion des swaps.
Le paramètre swappiness
permet de configurer la fréquence à laquelle votre système échange des données de la mémoire vive vers l’espace swap. 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. N’oubliez pas que les interactions avec le fichier swap sont « lourdes » dans la mesure où elles prennent beaucoup plus de temps que les interactions avec la mémoire vive et qu’elles peuvent entraîner une réduction significative des performances. Le fait de dire au système de ne pas trop dépendre du swap rendra généralement votre système plus rapide.
Les valeurs plus proches de 100 tenteront de mettre plus de données dans le swap afin de garder plus d’espace RAM libre. En fonction du profil de mémoire de vos applications ou de l’utilisation que vous faites de votre serveur, cela peut être préférable dans certains cas.
On peut voir la valeur actuelle du swap en tapant :
- cat /proc/sys/vm/swappiness
Output60
Pour un ordinateur de bureau, un paramètre de swappiness de 60 n’est pas une mauvaise valeur. Pour un serveur, vous voudrez peut-être le rapprocher de 0.
Nous pouvons régler le swappiness à une valeur différente en utilisant la commande sysctl
.
Par exemple, pour régler le swappiness sur 10, nous pourrions taper :
- sudo sysctl vm.swappiness=10
Outputvm.swappiness = 10
Ce réglage persistera jusqu’au prochain redémarrage. Nous pouvons fixer cette valeur automatiquement au redémarrage en ajoutant la ligne à notrefichier /etc/sysctl.conf
:
- sudo nano /etc/sysctl.conf
En bas, vous pouvez ajouter :
vm.swappiness=10
Enregistrez et fermez le fichier lorsque vous avez terminé.
Une autre valeur connexe que vous pourriez vouloir modifier est la vfs_cache_pressure
. Ce paramètre configure la quantité que le système choisira pour mettre en cache les informations d’inode et de dentry sur d’autres données.
Fondamentalement, il s’agit de données d’accès au système de fichiers. Il est généralement très difficile à consulter et très souvent demandé, c’est donc 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
:
- cat /proc/sys/vm/vfs_cache_pressure
Output100
Dans sa configuration actuelle, notre système supprime trop rapidement les informations d’inode du cache. Nous pouvons fixer ce chiffre à un niveau plus conservateur, comme 50, en tapant :
- sudo sysctl vm.vfs_cache_pressure=50
Outputvm.vfs_cache_pressure = 50
Encore une fois, ceci n’est valable que pour notre session actuelle. Nous pouvons changer cela en l’ajoutant à notre fichier de configuration comme nous l’avons fait avec notre réglage du swappiness :
- sudo nano /etc/sysctl.conf
En bas, ajoutez la ligne qui spécifie votre nouvelle valeur :
vm.vfs_cache_pressure=50
Enregistrez et fermez le fichier lorsque vous avez terminé.
En suivant les étapes décrites dans ce guide, vous aurez une certaine marge de manœuvre dans les cas qui, autrement, entraîneraient des exceptions hors mémoire. L’espace de swap peut être incroyablement utile pour éviter certains de ces problèmes courants.
Si vous rencontrez des erreurs OOM (out of memory), ou si vous constatez que votre système est incapable d’utiliser les applications dont vous avez besoin, la meilleure solution est d’optimiser vos configurations d’applications ou de mettre à niveau votre serveur.
Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.
This textbox defaults to using Markdown to format your answer.
You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!