Avons-nous besoin d'une partition Swap sur un serveur LAMP?

14

Avons-nous vraiment besoin d'échanger la partition sur le serveur ubuntu avec LAMP? Je pense que je n'en ai pas besoin, mais mieux vaut savoir avec certitude si cela ne causera pas un comportement imprévu.
En fait, mes pensées étaient:

  • Le serveur n'hiberne jamais
  • Si cela change, il faut penser à l'équilibrage de charge / à la mise en forme du trafic, etc.

Ai-je raison de désactiver le swap pour le serveur de production?

Merci!

Arman
la source

Réponses:

14

Ai-je raison de désactiver le swap pour le serveur de production?

Non. Ayez toujours un espace de swap.

J'ai essayé d'exécuter un serveur de production sans échange une fois et environ une semaine plus tard, après une mise à jour de Wordpress, PHP a commencé à manger beaucoup plus de RAM que nous n'en avions prévu. Lorsque vous manquez de RAM et que le swap est activé, les choses ralentissent (parfois beaucoup, parfois juste un peu, selon ce qui y est poussé), mais vous pouvez vous connecter, trouver le problème et essayer de le résoudre il.

Lorsque vous manquez de RAM et n'avez aucun échange, les processus meurent, les choses s'arrêtent et la plupart du temps, votre seule option est un redémarrage. Mais jusqu'à ce que vous fassiez ce redémarrage, les choses vont probablement se casser.

Dans mon monde, brisé est bien pire que lent.

Bien sûr , si vous trouvez que votre système utilise constamment de grandes portions de swap (il très souvent utiliser certains comme un moyen de sortir des vieux trucs mises en cache), vous avez évidemment un problème ( « RAM d'insertion s'il vous plaît »), mais ayant comme un filet de sécurité est définitivement recommandé.


En réponse au commentaire de SpamapS:

Dans le monde des "sites Web à succès", vous disposez de basculements à chaud, d'équilibrage de charge et d'autres outils qui permettent à une machine d'exploser et n'ont aucun effet sur le reste du site. Mais cela prend beaucoup d'argent. Avoir du matériel redondant n'est pas économique pour la plupart des sites, même s'ils tirent de l'argent.

Je suis totalement en désaccord avec votre commentaire sur la disponibilité. Dans une configuration de commerce électronique traditionnelle, si les gens ne peuvent pas voir votre site, ils ne peuvent pas acheter chez vous. Ce n'est pas seulement du commerce électronique, tous les intérêts commerciaux en ligne prennent beaucoup plus de retard si vous êtes en panne pour toute sorte de période. Je le sais car j'héberge des sites et des services pour les entreprises et gère mes propres sites. Lent = grincheux mais Down = fureur. Même si vous ne descendez qu'une minute à la fois, si un utilisateur voit un avis de "panne pour maintenance" plus de deux fois, il suppose que vous ne pouvez pas garder le site en place.

Un serveur lent n'est pas idéal mais le swap n'est pas là pour être exécuté tout le temps, c'est un dernier recours pour permettre aux choses de continuer à fonctionner pendant que vous les corrigez.

Vous supposez également qu'il n'y a qu'un seul service en cours d'exécution sur la machine. Encore une fois, cela pourrait être vrai si vous avez des mégabucks pour tout fractionner, mais dans le monde réel, les choses sont regroupées. Plusieurs sites Web, démons ssh, serveurs ftp, serveurs de messagerie, etc. Un processus qui s'infiltre dans le swap peut même ne pas affecter un autre service. Sans échange, tout a une chance égale de résiliation instantanée et aléatoire. Vous n'avez aucun contrôle dessus.

Bien sûr, l'échange n'est pas la seule réponse. Vous avez besoin d'une surveillance pour vous alerter lorsque vous êtes à court de RAM, mais le simple fait de débrancher la prise et de redémarrer n'est pas la solution pour la majorité des gens. Je suis sûr que cela fonctionne pour le site Web multinational dont vous êtes responsable, mais pour nous, les simples mortels (qui constituent la majorité d'Internet), le faire est un suicide commercial.

Oli
la source
Même expérience ici, un peu ... c'était une erreur de mon côté, pas une décision délibérée. Un serveur sans swap est un enfer à réparer, surtout s'il décide de tuer sshd.
Javier Rivera
J'ai environ 16 Go de RAM, la moitié est mise en cache pour des E / S rapides, le reste est pour LAMP, le swap est toujours gratuit, ou parfois quelques mégas sont là, mais je pense qu'il est toujours éteint ...
Arman
3
Dans le monde des sites Web à succès, ne pas répondre est pire que cassé. Les utilisateurs apprécieront en fait un échec RAPIDE (que votre code frontal javascript devrait gérer gracieusement btw), mais ils vous détesteront d'être lent. Laissez tomber l'échange, cela retarde juste l'inévitable. -1
SpamapS
1
@Oli: L'exécution de N + 1 ne prend plus de mégabucks, ni même beaucoup de dollars. En fait, il ne prend même guère de compétences particulières. Il est inévitable qu'un serveur tombe en panne pour un certain nombre de raisons, et pas si difficile que cela ne soit pas un problème. Si vous avez un serveur LAMP autonome qui fait tout, alors ce qui coûte plus cher; Mettre en place deux autres et un équilibreur de charge (sur EC2 avec t1.micros et instantanés EBS, cela peut être TRÈS bon marché), ou votre site est-il anormalement lent le plus gros jour? Vérifiez les données de Google ... Je pense que c'est clair bit.ly/hB1AD1
SpamapS
1
Excellente réponse, couvrant les cas de serveurs réels. L'ajout de matériel redondant, de LB, de surveillance, de caches de RAM, etc. est tous incroyablement important, et vous aurez le temps de les configurer et de les déboguer si vous ne perdez pas de temps parce que vous avez économisé de l'espace d'échange.
ImaginaryRobots
4

Je dois être en désaccord avec l'échange sur les serveurs de production.

D'après mon expérience, l'échange de disques rotatif rend votre système moins prévisible et plus enclin à frustrer les pannes de l'ensemble du système. Un serveur populaire à charge élevée qui fait quoi que ce soit avec un disque lent local se transformera rapidement en quelque chose de bien pire qu'un état d'échec. Les temps de réponse augmenteront jusqu'à 100 fois leur niveau normal, et des choses simples comme la connexion via la console ou ssh peuvent prendre quelques minutes.

L'échange SSD est un cas spécial et supprimerait au moins le ralentissement du temps de recherche qui tue généralement le système. Cependant, les écritures sont encore lentes, vous finirez donc par attendre très longtemps pour récupérer d'un processus hors de contrôle.

Sans échange, votre serveur LAMP va simplement tuer les processus pour libérer de la RAM. Une surveillance appropriée doit vous alerter de cela et supprimer les serveurs de la production si les processus critiques sont tués. Le pire des cas ici est que vos méthodes de connexion sont toutes supprimées et que vous devez effectuer une réinitialisation matérielle / un cycle d'alimentation. Ce pire cas est toujours aussi probable avec une machine à échanger hors de contrôle, mais beaucoup plus difficile à détecter.

Si vous utilisez PHP, activez les limites de mémoire et surveillez vos journaux pour leurs échecs. Voici une astuce, définissez une limite plus basse sur votre serveur de développement qu'en production. Si vous utilisez mod_php sous apache, définissez MaxRequestsPerChild sur quelques milliers, afin que httpd meure avant de devenir trop grand au fil du temps. Surtout, surveillez l'utilisation de la mémoire! Souvent, la mémoire augmente au fil du temps et il vous suffit de redémarrer périodiquement un service qui fuit pendant que vous déboguez le problème.

SpamapS
la source
1
Merci d'avoir partagé votre expérience. Je tenais compte des problèmes similaires, quand ssh prenait Inf. J'ai juste forcé les processus à avoir une mémoire limitée, ce qui me permettait de faire tourner ssh et de corriger les scripts de bug.
Arman
L'une des discussions les plus intéressantes sur l'espace d'échange en production que j'ai vues sur Internet. (tout le fil, pour et contre)
dpb
3

L'espace d'échange est utilisé lorsque votre système décide qu'il a besoin de mémoire physique pour les processus actifs et que la mémoire physique inutilisée est insuffisante. Si le système a besoin de plus de ressources mémoire ou d'espace, les pages inactives de la mémoire physique sont ensuite déplacées vers l'espace de swap, libérant ainsi cette mémoire physique pour d'autres utilisations.

Cette situation se produira plusieurs fois sur le serveur.

une). Un script non optimisé peut consommer une grande quantité de mémoire
b). Les scripts comme la sauvegarde consomment toujours une énorme mémoire
c). circulation dense

C'est donc une bonne pratique d'avoir un espace de swap.

Plus de détails: https://help.ubuntu.com/community/SwapFaq

aneeshep
la source
Merci pour l'explication. Si l'on a un script buggé, dans tous les cas, vous planterez le serveur, les limites du système devraient contrôler vos scripts, n'est-ce pas?
Arman
aneeshep, si vous échangez pendant un trafic intense, votre système sera 100 fois plus lent qu'il ne devrait normalement l'être. Ce n'est généralement pas acceptable.
SpamapS
2

L'utilisation de swap vous donnera une protection supplémentaire contre l'instabilité du serveur. Il peut bien y avoir des moments où la RAM est épuisée et sur le serveur sans échange, ce qui pourrait entraîner un plantage progressif.

Je suis probablement en minorité maintenant quand je dis, il est toujours logique, comme ils le recommandaient auparavant, d'avoir deux fois plus de swap que vous avez de mémoire principale. Même sur un système avec 96 Go de RAM.

Cela ne coûte pas cher et, si vous en avez besoin un jour, vous serez content de l'avoir. La raison de l'activation du swap est simplement une analyse coûts-avantages très simple. Fais le! :-)

Stefano Palazzo
la source
0

Je voudrais remercier Oli pour la belle - je sais vieille - réponse. Je trouve que le partitionnement est un sujet toujours vert! Je suis totalement d'accord avec la ligne du post d'Oli et je voudrais partager ce script - bien sûr améliorable - que j'utilise pour surveiller l'utilisation de swap de mes serveurs.

Je configure toujours les serveurs et les services pour qu'ils fonctionnent sans aucun échange. Lorsque c'est le cas, assurez-vous que quelque chose ne va pas ou, au mieux, que quelque chose dépasse vos plans initiaux.

Je crée ce script toutes les demi-heures en environnement de production. Il m'enverra une notification si Swap use! = 0k. Je pourrai rapidement enquêter / prendre des mesures sur le problème, la plupart du temps, avant que les choses ne tournent vraiment mal .

S'attend à ce que vous ayez: bash, top, echo, awk et une commande de messagerie fonctionnelle, sans effectuer aucune vérification.

J'espère que cela pourra aider.

#!/bin/bash
CURRSWAP=$(top -b -n1 |grep Swap |awk '{print $4}')
ECOMM="echo $CURRSWAP means healthy, I wont take any action."
CURRDATE=$(date)
MAILDST="[email protected]"

case $CURRSWAP in
  [0]k) $ECOMM
        exit 0
        ;;
  *)    echo -e "Server: $HOSTNAME \n Date: $CURRDATE \n Current Swap partition usage: $CURRSWAP" | mail -s "Warning from $HOSTNAME" -- $MAILDST
        exit 0
        ;;
esac
exit 0
Marco
la source