Récemment, mon ami m'a dit que c'était une bonne idée de désactiver l'échange sur les serveurs Web Linux avec suffisamment de mémoire. Mon serveur a 12 Go et utilise actuellement 4 Go (sans compter le cache et les tampons) sous une charge maximale.
Son argument était que dans une situation normale, le serveur n'utilisera jamais toute sa RAM, donc la seule façon dont il peut rencontrer la situation OutOfMemory est due à un bug / ddos / etc. Donc, si le swap est désactivé, le système manquera de mémoire, ce qui finira par planter la mémoire du programme (probablement le processus du serveur Web) et probablement d'autres processus. En cas swap est activé suril consommera à la fois de la RAM et du swap et finira par entraîner le même plantage, mais avant cela, il déchargera des processus cruciaux comme sshd pour swap et commencera à faire beaucoup d'opérations de swap entraînant un ralentissement majeur. De cette façon, lorsque le système sous ddos peut entrer dans un état complètement inutilisable en raison d'énormes retards et je ne serai probablement pas en mesure de se connecter et de tuer le processus du serveur Web ou de refuser tout le trafic entrant (tout sauf ssh).
Est-ce correct? Suis-je en train de manquer quelque chose (comme le fait que la partition de swap est très utile d'une certaine manière même si j'ai assez de RAM)? Dois-je l'éteindre?
Réponses:
Je dirais que cela dépend de votre cas d'utilisation et le reste des réponses ont assez bien couvert cela. La 4G de swap est après tout un moyen peu coûteux d'acheter de la sécurité. Et je pense que ce bon marché fait que les gens ne veulent pas l'éteindre.
Mais permettez-moi de répondre par une question rhétorique. Si l'argent n'est pas un problème et que vous avez le choix entre deux systèmes - un avec 12G de RAM et 4G de swap, et un autre avec 16G de RAM et sans swap - lequel choisiriez-vous? Malheureusement, la plupart des gens répondraient toujours qu'ils choisiraient 16G de RAM et ajouteraient encore 4G de swap, ce qui manque à mon argument.
Et sur une autre note, je trouve personnellement un système swappy pire qu'un système en panne. Un système en panne déclencherait un serveur de sauvegarde de secours pour prendre le relais beaucoup plus tôt. Et dans une configuration active-active (ou à charge équilibrée), un système en panne serait retiré de la rotation beaucoup plus tôt. Une victoire pour le système sans échange.
la source
Il n'est PAS recommandé de désactiver l'échange même si vous avez suffisamment de mémoire. Si votre serveur a besoin de plus de mémoire et ne l'a pas obtenu, il se bloquera. Cependant, cela peut être évité (dans une certaine mesure) lorsque vous avez une zone d'échange.
Oui, les performances de votre serveur se dégraderont lors de l'utilisation du swap, mais au moins elles seront opérationnelles et accessibles. Ensuite, vous pouvez planifier l'ajout de mémoire si nécessaire si votre serveur commence à utiliser swap.
J'ai trouvé cette page parlant de swap. Jetez un oeil à la 3e section.
Au lieu de désactiver l'échange, vous pouvez contrôler l' échange .
la source
Non, ce n'est pas une bonne idée. «un processus est devenu fou» signifie que vous devriez déjà avoir appelé de manière proactive
ulimit -d
au moment de la création du processus ou avant pour définir une limite sur la mémoire par segment de données de processus - Et peut-être une limite au nombre de threads
ulimit -T
par processus. ulimit est votre ami. Veuillez envisager de lire l'un des guides de réglage de la mémoire avant de désactiver l'échange. Vous pouvez également modifier les paramètres du noyau en essayant de gérer les attaques DOS ou les mauvais programmes.
Regardez-le de cette façon: la mémoire totale de votre système est RAM + swap. Si vous disposez de 12 Go de swap, vous réduisez simplement de moitié la capacité de la machine virtuelle du système en désactivant le swap. Mauvaise idée. Ce n'est pas un débat, vraiment, c'est simplement la lecture de ce que d'autres personnes ont connu de mauvaises expériences précédentes pendant des années. Il est possible que votre ami ait également besoin de lire.
la source
Comme d'autres l'ont dit, vous pouvez effectivement arrêter votre serveur en utilisant le swap sauf lorsque cela est absolument nécessaire en bricolant avec le paramètre "swappiness". Cela contrôle l'agressivité avec laquelle le noyau échangera les pages mémoire.
Vous pouvez voir ce qu'il est actuellement configuré avec:
et vous pouvez le modifier "en direct" avec (en tant que root):
et pour le faire persister, ajoutez ce qui suit à /etc/sysctl.conf:
la source
Une autre bonne chose que vous pouvez faire est de basculer dans la RAM en utilisant zRAM. Je pense que c'est une excellente idée! Pour les performances, c'est comme ne pas avoir de swap du tout, mais ça évite aussi les plantages quand le système est très chargé!
Regarde ça:
http://www.webupd8.org/2011/10/10/increased-performance-in-linux-with.html
Mon expérience: sur cette machine où j'écris maintenant, j'ai désactivé le swap, car j'ai une RAM de 4 Go (en 2009 c'était beaucoup!). Je n'ai rencontré que quelques problèmes, l'un d'eux s'ouvrait comme 127 photos en même temps par erreur!
MAIS .. c'est un poste de travail, et je peux me permettre de redémarrer s'il se bloque. Dans un serveur, je pense qu'il vaut mieux avoir un échange, et le swap-in-RAM me semble bon.
la source
Comme cela a déjà été clairement expliqué, ce n'est pas une bonne idée. Si rien d'autre, l'échange vous donne un peu de répit lorsque les choses ne sont pas tout à fait normales. Par exemple, sur un système que je regarde, qui ne compte normalement que quelques visiteurs par jour, il y avait un pic de trafic massif provoqué par une page mentionnée dans un magazine. Cela a conduit le serveur Web à utiliser l'espace d'échange pour la première fois depuis sa mise en service. Sans cet espace d'échange, les choses ne se seraient pas très bien passées.
la source
Pas une bonne idée. Vous pouvez définir 2 fichiers d'échange avec une priorité différente. Un plus petit qui est utilisé et un plus grand qui sera utilisé au cas où le premier se remplit.
Vm.swappiness peut également vous aider à contrôler l'agressivité de l'échange de disque.
la source
Si vous insérez un 0 à vm.swappiness, cela ne signifie pas nécessairement que le système n'échangera pas. Il s'agit d'un paramètre permettant de déterminer à quel point la tendance de kerne serait agressive, mais il ne désactive pas le swap.
Encore une fois, l'échange n'est pas mauvais, mais la raclée l'est. Jetez un oeil sur les données sysstat et cela devrait donner un assez bon pointeur dessus.
la source