Comment ajouter de l’espace de swap sur Ubuntu 16.04

introduction

L’un des moyens les plus simples d’accroître la réactivité de votre serveur et de vous protéger contre les erreurs de mémoire insuffisante dans les applications consiste à ajouter de l’espace d’échange. Dans ce guide, nous expliquerons comment ajouter un fichier d’échange à un serveur Ubuntu 16.04.

Attention

Qu’est-ce qu’un échange?

  • Swap * est une zone du disque dur désignée comme un emplacement où le système d’exploitation peut stocker temporairement des données qu’il ne peut plus conserver dans la RAM. En gros, cela vous donne la possibilité d’augmenter la quantité d’informations que votre serveur peut conserver dans sa «mémoire» de travail, avec quelques réserves. L’espace de permutation sur le disque dur sera utilisé principalement lorsqu’il n’y a plus assez d’espace dans la RAM pour stocker les données d’application en cours d’utilisation.

Les informations écrites sur le disque seront nettement plus lentes que les informations stockées dans la RAM, mais le système d’exploitation préférera continuer à exécuter les données d’application en mémoire et utiliser la permutation pour les données plus anciennes. Globalement, le fait d’avoir l’espace de permutation en cas d’épuisement de la mémoire RAM de votre système peut constituer un bon filet de sécurité contre les exceptions de mémoire insuffisante sur les systèmes dotés d’un stockage non-SSD.

Vérifier le système pour les informations de swap

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

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

sudo swapon --show

Si vous ne récupérez aucune sortie, cela signifie que votre système ne dispose pas actuellement d’espace d’échange.

Vous pouvez vérifier qu’il n’existe aucun échange actif à l’aide de l’utilitaire + free +:

free -h
Output              total        used        free      shared  buff/cache   available
Mem:           488M         36M        104M        652K        348M        426M

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

Vérifier l’espace disponible sur la partition du disque dur

Le moyen le plus courant d’allouer de l’espace pour le swap consiste à utiliser une partition distincte consacrée à la tâche. Toutefois, la modification du schéma de partitionnement n’est pas toujours possible. Nous pouvons tout aussi facilement créer un fichier d’échange qui réside sur une partition existante.

Avant de faire cela, nous devrions vérifier l’utilisation actuelle du disque en tapant:

df -h
OutputFilesystem      Size  Used Avail Use% Mounted on
udev            238M     0  238M   0% /dev
tmpfs            49M  624K   49M   2% /run

tmpfs           245M     0  245M   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           245M     0  245M   0% /sys/fs/cgroup
tmpfs            49M     0   49M   0% /run/user/1001

Le périphérique sous + / dev + est notre disque dans ce cas. Nous avons beaucoup d’espace disponible dans cet exemple (seulement 1.1G 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 règle générale, une quantité égale ou double de la quantité de RAM sur votre système constitue un bon point de départ. Une autre bonne règle est que tout échange supérieur à 4G est probablement inutile si vous l’utilisez simplement comme solution de secours de la RAM.

Créer un fichier d’échange

Maintenant que nous connaissons notre espace disque disponible, nous pouvons créer un fichier d’échange au sein de notre système de fichiers. Nous allons créer un fichier de la taille de swap que nous voulons appelé + swapfile + dans notre répertoire racine (/).

Le meilleur moyen de créer un fichier d’échange est d’utiliser le programme + fallocate +. Cette commande crée instantanément un fichier de taille préallouée.

Étant donné que le serveur dans notre exemple dispose de 512 Mo de RAM, nous allons créer un fichier de 1 gigaoctet dans ce guide. Ajustez-le pour répondre aux besoins de votre propre serveur:

sudo fallocate -l  /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 quantité correcte d’espace réservé.

Activer le fichier d’échange

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

Premièrement, 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 conséquences importantes pour la sécurité.

Rendez le fichier accessible uniquement à + ​​root + en tapant:

sudo chmod 600 /swapfile

Vérifiez que les autorisations changent en tapant:

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

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

Nous pouvons maintenant marquer le fichier comme espace de 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 d’échange, ce qui permet à notre système de commencer à l’utiliser:

sudo swapon /swapfile

Nous pouvons vérifier que le swap est disponible en tapant:

sudo swapon --show
OutputNAME      TYPE  SIZE USED PRIO
/swapfile file 1024M   0B   -1

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

free -h
Output              total        used        free      shared  buff/cache   available
Mem:           488M         37M         96M        652K        354M        425M

Notre échange a été mis en place avec succès et notre système d’exploitation commencera à l’utiliser au besoin.

Rendre le fichier d’échange permanent

Nos modifications récentes 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 à votre fichier + / etc / fstab.

Sauvegardez le fichier + / etc / fstab + en cas de problème:

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

Vous pouvez 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

Tweak vos paramètres de swap

Il existe quelques options que vous pouvez configurer qui auront une incidence sur les performances de votre système lors de la conversion.

Ajuster la propriété Swappiness

Le paramètre + swappiness + configure la fréquence à laquelle votre système échange des données hors de la mémoire RAM vers l’espace de permutation. C’est une valeur 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 sauf en cas d’absolue nécessité. N’oubliez pas que les interactions avec le fichier d’échange sont «coûteuses» en ce sens qu’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 trop compter sur l’échange accélérera généralement votre système.

Les valeurs proches de 100 essaieront de convertir plus de données en données afin de libérer davantage d’espace RAM. 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.

Nous pouvons voir la valeur actuelle de swappiness en tapant:

cat /proc/sys/vm/swappiness
Output60

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

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

Par exemple, pour définir le swappiness sur 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:

/etc/sysctl.conf

vm.swappiness=10

Enregistrez et fermez le fichier lorsque vous avez terminé.

Réglage du paramètre de pression du cache

Une autre valeur connexe que vous voudrez peut-être modifier est le + vfs_cache_pressure +. Ce paramètre configure la quantité de mémoire que le système choisira de mettre en cache les informations inode et dentry par rapport aux autres données.

Fondamentalement, il s’agit de données d’accès concernant le système de fichiers. C’est généralement très coûteux à rechercher et très fréquemment demandé, c’est donc une excellente chose à mettre en cache par 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

Dans sa configuration actuelle, notre système supprime trop rapidement les informations inode du cache. Nous pouvons définir ceci dans un paramètre plus conservateur comme 50 en tapant:

sudo sysctl vm.vfs_cache_pressure=50
Outputvm.vfs_cache_pressure = 50

Encore une fois, cela n’est valable que pour notre session en cours. Nous pouvons changer cela en l’ajoutant à notre fichier de configuration, comme nous l’avons fait avec notre paramètre swappiness:

sudo nano /etc/sysctl.conf

En 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

En suivant les étapes de ce guide, vous aurez un peu de marge de manoeuvre dans les cas qui pourraient par ailleurs conduire à des exceptions de mémoire insuffisante. L’échange d’espace peut s’avérer extrêmement utile pour éviter certains de ces problèmes courants.

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