Comment ajouter un swap sur Ubuntu 14.04

De Get Docs
Aller à :navigation, rechercher

Introduction

L'un des moyens les plus simples d'augmenter la réactivité de votre serveur et de vous prémunir contre les erreurs de mémoire insuffisante dans vos applications consiste à ajouter de l'espace de 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 temporairement stocker des données qu'il ne peut plus conserver 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 sur le disque dur sera utilisé principalement lorsque l'espace dans la RAM n'est plus suffisant pour les données.

Les informations écrites sur le disque seront plus lentes que les informations conservé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 le swap pour les données plus anciennes. Dans l'ensemble, disposer d'un espace d'échange comme solution de repli lorsque la RAM de votre système est épuisée est un bon filet de sécurité.

Dans ce guide, nous expliquerons comment créer et activer un fichier d'échange sur un serveur Ubuntu 14.04.

Noter

Bien que l'échange soit généralement recommandé pour les systèmes utilisant des disques durs rotatifs traditionnels, l'utilisation de l'échange avec des SSD peut entraîner 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 l'échange 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.

Si vous avez besoin d'améliorer les performances de votre serveur, nous vous recommandons de mettre à niveau votre Droplet. Cela conduira à de meilleurs résultats en général et réduira la probabilité de contribuer à des problèmes matériels pouvant affecter votre service.


Vérifier le système pour les informations d'échange

Avant de commencer, nous allons jeter un œil à notre système d'exploitation pour voir si nous avons déjà de l'espace d'échange disponible. Nous pouvons avoir plusieurs fichiers d'échange ou partitions d'échange, mais généralement un devrait suffire.

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

sudo swapon -s

Filename             Type        Size    Used    Priority

Si vous ne récupérez que l'en-tête de la table, comme je l'ai montré ci-dessus, vous n'avez actuellement aucun espace d'échange activé.

Une autre façon plus familière de vérifier l'espace d'échange consiste à utiliser l'utilitaire free, qui nous montre l'utilisation de la mémoire système. Nous pouvons voir notre utilisation actuelle de la mémoire et de l'échange en mégaoctets en tapant :

 gratuit -m
  total des tampons partagés libres utilisés en cache Mem : 3953 154 3799 0 8 83 -/+ tampons/cache : 62 3890 Swap : 0 0 0

Comme vous pouvez le voir ci-dessus, notre espace d'échange total dans le système est "0". Cela correspond à ce que nous avons vu avec la commande précédente.

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

La manière typique d'allouer de l'espace pour le swap consiste à utiliser une partition séparée dédiée à la tâche. Cependant, il n'est pas toujours possible de modifier le schéma de partitionnement. Nous pouvons tout aussi facilement créer un fichier d'échange qui réside sur une partition existante.

Avant de faire cela, nous devons être conscients de notre utilisation actuelle du disque. Nous pouvons obtenir ces informations en tapant:

 df-h
  Taille du système de fichiers utilisé Avail Use% Mounted on /dev/vda 59G 1.3G 55G 3% / none 4.0K 0 4.0K 0% /sys/fs/cgroup udev 2.0G 12K 2.0G 1% /dev tmpfs 396M 312K 396M 1% / run aucun 5.0M 0 5.0M 0% /run/lock aucun 2.0G 0 2.0G 0% /run/shm aucun 100M 0 100M 0% /run/user

Comme vous pouvez le voir sur la première ligne, notre partition de disque dur dispose de 55 gigaoctets disponibles, nous avons donc une énorme quantité d'espace pour travailler. Cependant, il s'agit d'une nouvelle instance VPS de taille moyenne, de sorte que votre utilisation réelle peut être très 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. Généralement, une quantité égale ou double de la quantité de RAM sur votre système est un bon point de départ.

Étant donné que mon système dispose de 4 gigaoctets de RAM et que doubler cela prendrait une part importante de mon espace disque dont je ne veux pas me séparer, je vais créer un espace d'échange de 4 gigaoctets pour correspondre à la RAM de mon système.

Créer un fichier d'échange

Maintenant que nous connaissons l'espace disponible sur notre disque dur, nous pouvons commencer à créer un fichier d'échange dans notre système de fichiers.

Nous allons créer un fichier nommé swapfile dans notre répertoire racine (/). Le fichier doit allouer la quantité d'espace que nous voulons pour notre fichier d'échange. Il existe deux manières principales de procéder :

La manière traditionnelle et lente

Traditionnellement, nous créons un fichier avec un espace préalloué en utilisant la commande dd. Cet utilitaire de disque polyvalent écrit d'un emplacement à un autre.

Nous pouvons l'utiliser pour écrire des zéros dans le fichier à partir d'un périphérique spécial dans les systèmes Linux situé à /dev/zero qui crache juste autant de zéros que demandé.

Nous spécifions la taille du fichier en utilisant une combinaison de bs pour la taille de bloc et count pour le nombre de blocs. Ce que nous attribuons à chaque paramètre est presque entièrement arbitraire. Ce qui compte, c'est ce que devient le produit de leur multiplication.

Par exemple, dans notre exemple, nous cherchons à créer un fichier de 4 gigaoctets. Nous pouvons le faire en spécifiant une taille de bloc de 1 Gigaoctet et un nombre de 4 :

sudo dd if=/dev/zero of=/swapfile bs=1G count=4

4+0 records in
4+0 records out
4294967296 bytes (4.3 GB) copied, 18.6227 s, 231 MB/s

Vérifiez votre commande avant d'appuyer sur ENTREE car cela risque de détruire des données si vous pointez le of (qui signifie fichier de sortie) vers le mauvais emplacement.

Nous pouvons voir que 4 gigaoctets ont été alloués en tapant :

 ls -lh /swapfile
  -rw-r–r-- 1 racine racine 4.0G 28 avril 17:15 /swapfile

Si vous avez terminé la commande ci-dessus, vous remarquerez peut-être que cela a pris un certain temps. En fait, vous pouvez voir dans la sortie qu'il a fallu 18 secondes à mon système pour créer le fichier. C'est parce qu'il doit écrire 4 gigaoctets de zéros sur le disque.

Si vous souhaitez apprendre à créer le fichier plus rapidement, supprimez-le et suivez les instructions ci-dessous :

sudo rm /swapfile

Le moyen le plus rapide

Le moyen le plus rapide d'obtenir le même fichier consiste à utiliser le programme fallocate. Cette commande crée instantanément un fichier d'une taille préallouée, sans avoir à écrire de contenu factice.

Nous pouvons créer un fichier de 4 gigaoctets en tapant :

sudo fallocate -l 4G /swapfile

L'invite vous sera renvoyée presque immédiatement. Nous pouvons vérifier que la bonne quantité d'espace a été réservée en tapant :

 ls -lh /swapfile
  -rw-r–r-- 1 racine racine 4.0G 28 avril 17:19 /swapfile

Comme vous pouvez le voir, notre fichier est créé avec la bonne quantité d'espace réservée.

Activation du fichier d'échange

À l'heure actuelle, notre fichier est créé, mais notre système ne sait pas qu'il est censé être utilisé pour l'échange. Nous devons indiquer à notre système de formater ce fichier en tant que swap, puis de l'activer.

Avant de faire cela, nous devons ajuster les autorisations sur notre fichier afin qu'il ne soit lisible par personne d'autre que root. Autoriser d'autres utilisateurs à lire ou à écrire dans ce fichier constituerait un énorme risque pour la sécurité. Nous pouvons verrouiller les autorisations en tapant :

sudo chmod 600 /swapfile

Vérifiez que le fichier dispose des autorisations appropriées en saisissant :

 ls -lh /swapfile
  -rw------- 1 racine racine 4.0G 28 avril 17:19 /swapfile

Comme vous pouvez le voir, seules les colonnes de l'utilisateur root ont les indicateurs de lecture et d'écriture activés.

Maintenant que notre fichier est plus sécurisé, nous pouvons dire à notre système de configurer l'espace d'échange en tapant :

sudo mkswap /swapfile

Setting up swapspace version 1, size = 4194300 KiB
no label, UUID=e2f1e9cf-c0a9-4ed4-b8ab-714b8a7d6944

Notre fichier est maintenant prêt à être utilisé comme espace d'échange. Nous pouvons l'activer en tapant:

sudo swapon /swapfile

Nous pouvons vérifier que la procédure a réussi en vérifiant si notre système signale maintenant l'espace d'échange :

 échange sudo -s
  Nom de fichier Type Taille Utilisée Priorité /swapfile file 4194300 0 -1

Nous avons un nouveau fichier d'échange ici. Nous pouvons à nouveau utiliser l'utilitaire free pour corroborer nos résultats :

 gratuit -m
  total des tampons partagés gratuits utilisés en cache Mem : 3953 101 3851 0 5 30 -/+ tampons/cache : 66 3887 Swap : 4095 0 4095

Notre swap a été mis en place avec succès et notre système d'exploitation commencera à l'utiliser si nécessaire.

Rendre le fichier d'échange permanent

Notre fichier d'échange est activé, mais lorsque nous redémarrons, le serveur n'active pas automatiquement le fichier. Nous pouvons cependant changer cela en modifiant le fichier fstab.

Modifiez le fichier avec les privilèges root dans votre éditeur de texte :

sudo nano /etc/fstab

Au bas du fichier, vous devez ajouter une ligne qui indiquera au système d'exploitation d'utiliser automatiquement le fichier que vous avez créé :

/swapfile   none    swap    sw    0   0

Enregistrez et fermez le fichier lorsque vous avez terminé.

Ajustez vos paramètres d'échange

Il existe quelques options que vous pouvez configurer et qui auront un impact sur les performances de votre système lors de l'échange.

Le paramètre swappiness configure la fréquence à laquelle votre système échange les 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 sauf en cas d'absolue nécessité. 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 trop compter sur le swap rendra généralement votre système plus rapide.

Les valeurs plus proches de 100 essaieront de mettre plus de données dans le swap dans le but 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.

Nous pouvons voir la valeur de swappiness actuelle en tapant :

cat /proc/sys/vm/swappiness

60

Pour un ordinateur de bureau, un paramètre de swappiness de 60 n'est pas une mauvaise valeur. Pour un système VPS, nous voudrions probablement le rapprocher de 0.

Nous pouvons définir la permutation sur 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

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 :

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 voudrez peut-être 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 par rapport aux autres données.

Fondamentalement, ce sont des données d'accès sur le 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 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

100

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

sudo sysctl vm.vfs_cache_pressure=50

vm.vfs_cache_pressure = 50

Encore une fois, ceci 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 :

vm.vfs_cache_pressure = 50

Enregistrez et fermez le fichier lorsque vous avez terminé.

Conclusion

Suivre les étapes de ce guide vous donnera une marge de manœuvre en termes d'utilisation de la RAM. L'espace d'échange est incroyablement utile pour éviter certains problèmes courants.

Si vous rencontrez des erreurs OOM (mémoire insuffisante) ou si vous constatez que votre système est incapable d'utiliser les applications dont vous avez besoin, la meilleure solution consiste à optimiser les configurations de vos applications ou à mettre à niveau votre serveur. Cependant, la configuration de l'espace d'échange peut vous donner plus de flexibilité et peut vous aider à gagner du temps sur un serveur moins puissant.

Par Justin Ellingwood