Dois-je désactiver complètement le swap pour le serveur web Linux?

22

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?

Poma
la source
6
Ainsi, toutes les réponses se résument à des déclarations selon lesquelles 1. plus de mémoire virtuelle est inconditionnellement meilleure que moins, et 2. il doit y avoir un échange activé car il est bon, ni l'un ni l'autre n'est bien fondé.
NekojiruSou
2
Il est erroné de penser que l'échange est exclusivement destiné à la mémoire de «réserve». L'échange est destiné à un endroit pour mettre de la mémoire inutilisée (afin que vous puissiez utiliser votre mémoire réelle plus efficacement). Vous devriez toujours avoir un échange. Si vous manquez de mémoire, alors votre manque de mémoire - période. Il s'agit d'un problème de gestion des capacités - pas d'une tendance à l'échange. J'ai une réponse assez longue serverfault.com/a/332205/75118 qui essaie de mieux expliquer les intentions de la mémoire virtuelle.
Matthew Ife

Réponses:

27

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.

chutz
la source
14

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 .

Khaled
la source
1
Dans la situation que j'ai décrite, il consommera à la fois le swap et la RAM et plantera également. Il fonctionne depuis quelques mois et n'a jamais utilisé plus de 30% de mémoire. Il est donc très peu probable qu'il atteigne 100% si rapidement en fonctionnement normal. Donc, si un processus est devenu fou et a consommé 8 Go, cela signifie qu'il consommera autant de mémoire que le système d'exploitation peut en obtenir, cela signifie tout cela.
Poma
@Poma, le swap présente également d'autres avantages. De plus, vous pouvez permettre au système de vivre beaucoup plus longtemps lorsque vous avez un échange. En effet, le swap peut être plus volumineux que la mémoire compte tenu de la disponibilité de disques HD bon marché.
Khaled
6

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.

Jim Mcnamara
la source
5

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:

cat /proc/sys/vm/swappiness

et vous pouvez le modifier "en direct" avec (en tant que root):

# echo "10" > /proc/sys/vm/swappiness

et pour le faire persister, ajoutez ce qui suit à /etc/sysctl.conf:

vm.swappiness=10
Orlando Richards
la source
2

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.

CyberPlant
la source
1

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.

John Gardeniers
la source
0

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.

Dragos
la source
0

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.

Soham Chakraborty
la source