Une version précédente de ce tutoriel a été écrite par Justin Ellingwood
- Introduction
- Qu’est-ce que Swap?
- Étape 1 – Vérifier le système pour les informations swap
- Étape 2 – Vérification de l’espace disponible sur la partition du disque dur
- Étape 3 – Création d’un fichier d’échange
- Étape 4 – Activation du fichier de swap
- Étape 5 – Rendre le fichier swap permanent
- Étape 6 – Régler vos paramètres de swap
- Régler la propriété de swap
- Ajustement du paramètre de pression du cache
- Conclusion
Introduction
L’un des moyens les plus simples de se prémunir contre les erreurs hors mémoire dans les applications est d’ajouter un peu d’espace swap à votre serveur. Dans ce guide, nous allons couvrir comment ajouter un fichier swap à un serveur Ubuntu 18.04.
Avertissement : Bien que le swap soit généralement recommandé pour les systèmes utilisant des disques durs rotatifs traditionnels, l’utilisation du swap avec des SSD peut causer des problèmes de dégradation du matériel au fil du temps. En raison de cette considération, nous ne recommandons pas d’activer swap sur DigitalOcean ou tout autre fournisseur qui utilise le stockage SSD. Cela peut avoir un impact sur la fiabilité du matériel sous-jacent pour vous et vos voisins. Ce guide est fourni à titre de référence pour les utilisateurs qui peuvent avoir des systèmes à disque tournant ailleurs.
Si vous devez améliorer les performances de votre serveur sur DigitalOcean, nous vous recommandons de mettre à niveau votre Droplet. Cela conduira à de meilleurs résultats en général et diminuera la probabilité de contribuer à des problèmes matériels qui peuvent affecter votre service.
Qu’est-ce que Swap?
Swap est une zone sur un disque dur qui a été désignée comme un endroit où le système d’exploitation peut stocker temporairement les données qu’il ne peut plus contenir dans la RAM. Fondamentalement, cela vous donne la possibilité d’augmenter la quantité d’informations que votre serveur peut conserver dans sa « mémoire » de travail, avec quelques mises en garde. L’espace swap sur le disque dur sera utilisé principalement lorsqu’il n’y a plus assez d’espace dans la RAM pour contenir les données d’application en cours d’utilisation.
Les informations écrites sur le disque seront significativement 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 le swap pour les données plus anciennes. Dans l’ensemble, avoir de l’espace swap comme solution de repli lorsque la RAM de votre système est épuisée peut être un bon filet de sécurité contre les exceptions hors mémoire sur les systèmes avec un stockage non-SSD disponible.
Étape 1 – Vérifier le système pour les informations swap
Avant de commencer, nous pouvons vérifier si le système a déjà de l’espace swap disponible. Il est possible d’avoir plusieurs fichiers swap ou partitions swap, mais généralement un seul devrait suffire.
Nous pouvons voir si le système a un swap configuré en tapant :
- sudo swapon --show
Si vous n’obtenez aucune sortie, cela signifie que votre système n’a pas d’espace swap disponible actuellement.
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 availableMem: 985M 84M 222M 680K 678M 721MSwap: 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 swap, nous allons vérifier notre utilisation actuelle du disque pour nous assurer que nous avons suffisamment d’espace. Faites-le en entrant :
- df -h
OutputFilesystem Size Used Avail Use% Mounted onudev 481M 0 481M 0% /devtmpfs 99M 656K 98M 1% /run/dev/vda1 25G 1.4G 23G 6% /tmpfs 493M 0 493M 0% /dev/shmtmpfs 5.0M 0 5.0M 0% /run/locktmpfs 493M 0 493M 0% /sys/fs/cgroup/dev/vda15 105M 3.4M 102M 4% /boot/efitmpfs 99M 0 99M 0% /run/user/1000
Le périphérique avec /
dans la colonne Mounted on
est notre disque dans ce cas. Nous avons beaucoup d’espace disponible dans cet exemple (seulement 1,4G utilisé). Votre utilisation sera probablement différente.
Bien qu’il existe de nombreuses opinions sur la taille appropriée d’un espace d’échange, cela dépend vraiment de vos préférences personnelles et des exigences de votre application. En général, une quantité égale ou double de la quantité de RAM sur 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 d’espace d’échange est probablement inutile si vous l’utilisez simplement comme une solution de repli de la RAM.
Étape 3 – Création d’un fichier d’échange
Maintenant que nous connaissons notre espace disque dur disponible, nous pouvons créer un fichier d’échange sur notre système de fichiers. Nous allons allouer un fichier de la taille de swap que nous voulons appelé swapfile
dans notre répertoire racine (/).
La meilleure façon de créer un fichier swap est avec le programme fallocate
. Cette commande crée instantanément un fichier de la taille spécifiée.
Puisque le serveur dans notre exemple a 1G de RAM, nous allons créer un fichier de 1G dans ce guide. Ajustez ceci pour répondre aux besoins de votre propre serveur :
- sudo fallocate -l 1G /swapfile
Nous pouvons vérifier que la bonne quantité d’espace a été réservée en tapant :
- ls -lh /swapfile
- -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 de swap
Maintenant que nous avons un fichier de la taille correcte disponible, nous devons effectivement le transformer en espace de swap.
D’abord, nous devons verrouiller les autorisations du fichier afin que seuls les utilisateurs ayant les privilèges de root puissent 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 uniquement accessible à root en tapant :
- sudo chmod 600 /swapfile
Vérifier le changement de permissions en tapant :
- 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 :
- 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 d’échange, permettant à notre système de commencer à l’utiliser :
- sudo swapon /swapfile
Vérifiez que l’échange est disponible en tapant :
- sudo swapon --show
OutputNAME 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 :
- free -h
Output total used free shared buff/cache availableMem: 985M 84M 220M 680K 680M 722MSwap: 1.0G 0B 1.0G
Notre swap a été configuré avec succès et notre système d’exploitation va commencer à l’utiliser si nécessaire.
Étape 5 – Rendre le fichier swap permanent
Nos récents changements ont activé le fichier swap pour la session actuelle. Cependant, si nous redémarrons, le serveur ne conservera pas automatiquement les paramètres de swap. Nous pouvons changer cela en ajoutant le fichier d’échange à notre fichier /etc/fstab
.
Sauvegarder le fichier /etc/fstab
au cas où quelque chose irait mal:
- sudo cp /etc/fstab /etc/fstab.bak
Ajouter les informations du fichier d’échange à la fin de votre fichier /etc/fstab
en tapant:
- echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
Puis nous passerons en revue certains paramètres que nous pouvons mettre à jour pour régler notre espace d’échange.
Étape 6 – Régler vos paramètres de swap
Il y a quelques options que vous pouvez configurer qui auront un impact sur les performances de votre système lorsqu’il s’agit de swap.
Régler la propriété de swap
Le paramètre swappiness
configure la fréquence à laquelle votre système échange les données de la RAM vers l’espace de 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 ne swapera pas de données vers le disque à moins que cela ne soit absolument nécessaire. N’oubliez pas que les interactions avec le fichier d’échange sont « coûteuses » dans la mesure où elles prennent beaucoup plus de temps que les interactions avec la RAM et qu’elles peuvent entraîner une réduction significative des performances. Dire au système de ne pas beaucoup compter sur le swap rendra généralement votre système plus rapide.
Les valeurs qui sont plus proches de 100 essaieront de mettre plus de données dans le swap dans un effort pour 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 mieux dans certains cas.
Nous pouvons voir la valeur actuelle de swappiness 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 pourriez vouloir le rapprocher de 0.
Nous pouvons définir le swappiness à une valeur différente en utilisant la commande sysctl
.
Par exemple, pour définir le swappiness à 10, nous pourrions taper:
- sudo sysctl vm.swappiness=10
Outputvm.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
:
- sudo nano /etc/sysctl.conf
En bas, vous pouvez ajouter:
vm.swappiness=10
Sauvegarder et fermer le fichier lorsque vous avez terminé.
Ajustement du paramètre de pression du cache
Une autre valeur connexe que vous pourriez vouloir modifier est le vfs_cache_pressure
. Ce paramètre configure dans quelle mesure le système choisira de mettre en cache les informations d’inode et de dentry plutôt que d’autres données.
Basiquement, ce sont les données d’accès au système de fichiers. Ceci est généralement très coûteux à rechercher et très fréquemment demandé, c’est donc une excellente chose à mettre en cache pour votre système. Vous pouvez voir la valeur actuelle en interrogeant à nouveau le système de fichiers proc
:
- cat /proc/sys/vm/vfs_cache_pressure
Output100
Comme il est actuellement configuré, notre système supprime les informations d’inode du cache trop rapidement. Nous pouvons définir un paramètre plus conservateur comme 50 en tapant:
- sudo sysctl vm.vfs_cache_pressure=50
Outputvm.vfs_cache_pressure = 50
Encore, 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 paramètre de 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é.
Conclusion
Suivre les étapes de ce guide vous donnera un peu de répit dans des cas qui conduiraient autrement à des exceptions de mémoire insuffisante. L’espace 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 les configurations de vos applications ou de mettre à niveau votre serveur.