CentOS Combien de SWAP pour 16 Go de RAM?

11

Combien de SWAP donneriez-vous à une installation CentOS sur un double Quad Core XEON avec 16 Go de RAM qui va exécuter un site Web php avec un backend mysql - charge moyenne / lourde?


la source

Réponses:

20

Pas plus d'un concert ou deux - vous voulez un peu de swap disponible, juste au cas où et parce que cela aide les choses à fonctionner un peu mieux, mais si jamais vous arrivez au point où vous échangez beaucoup, la machine va être inutile - et dans une situation vraiment catastrophique, vous êtes en fait mieux avec un espace de swap plus petit, car alors vous déclencherez le tueur OOM plus tôt que tard.

genehack
la source
7
Et rappelez-vous que vous pouvez toujours ajouter plus d'espace de swap plus tard si cela est nécessaire en créant de l'espace et en créant un nouveau volume (si vous utilisez LVM) ou en utilisant un fichier comme swap avec quelque chose commedd if=/dev/zero of=swap.file bs=1024 count=1048576; mkswap swap.file; swapon swap.file
David Spillett
3
En remarque, vous pouvez contrôler le degré de permutation en ajustant la valeur / proc / sys / vm / swappiness.
David
2
Je vais devoir être en désaccord avec quelques points ici. . . Tout d'abord, le disque est bon marché, vous pourriez aussi bien y jeter quelques Go. Deuxièmement, le tueur OOM peut enlever toute votre boîte si vous n'avez pas de chance. S'y fier de quelque manière que ce soit ou le considérer comme meilleur pour déclencher le tueur OOM est une très mauvaise idée. Penser qu'une boîte potentiellement arrosée est meilleure qu'un ralentissement potentiel est également une mauvaise idée. La seule fois qui serait raisonnable est si vous aviez prévu une configuration très spécifique autour de cette situation.
Christopher Cashell,
note latérale, il est généralement préférable de définir le swap sur une partition et non sur un fichier pour éviter les frais généraux et simplifier le processus de démarrage. cependant l'utilisation d'un fichier fonctionnera. 4 Go est tout ce dont un système devrait avoir besoin, je doute que vous obtiendrez beaucoup de toute façon avec 16 Go de RAM
Silverfire
En fait, selon Andrew Morton, la performance devrait être à peu près la même entre un fichier d'échange et une partition lkml.org/lkml/2005/6/29/11
Journeyman Geek
8

Je m'excuse pour la très longue réponse. Je voulais mettre ces trucs dans un endroit accessible depuis un moment!

TLDR; Théoriquement, la réponse serait "probablement pas moins que la quantité totale de mémoire résidente que toutes vos applications veulent utiliser"

Je vais essayer de t'expliquer si tu restes avec moi ..

Un peu sur la mémoire virtuelle

Je pense qu'il y a une idée fausse courante ces jours-ci sur la valeur du swap et son objectif. Il est souvent considéré que l'échange est conçu comme une «banque de réserve» pour la mémoire lorsque vous manquez de mémoire. Oui, c'est en partie vrai, mais le noyau ne veut pas utiliser votre swap comme banque de réserve . De plus, le noyau ne veut jamais invoquer le disque pour obtenir les données que vous recherchez!

Dans l'espace d'application, il y a un certain nombre de choses que le noyau gardera en mémoire.

  • Données de fichier mappées.
  • systèmes de fichiers tmpfs.
  • Mémoire d'application brute allouée lors de l'exécution.
  • Code d'application (tel que des éléments dans le segment de données des formats ELF)
  • Données de fichier à mappage privé.

À des fins de gestion de la mémoire, l'allocation de mémoire est sauvegardée sous une forme ou une autre par un périphérique de prise en charge.

La mémoire sauvegardée sur fichier est une mémoire qui provient d'un fichier et sur un système d'exploitation classique constitue la grande majorité de l'allocation de mémoire sur le système. Il comprend des fichiers tels que des bibliothèques partagées qui ont été chargées, des fichiers lus sur le disque et stockés dans le cache de pages et des fichiers mmappés à partir du disque (en fait, le noyau ne fait aucune distinction de pages entre les fichiers dans le cache de pages et les fichiers mmappés comme essentiellement la même chose).

La grande chose à propos de cette mémoire du point de vue des noyaux est son jetable, c'est-à-dire qu'il devrait être possible de vider ces pages si vous avez besoin de la mémoire pour autre chose et c'est exactement ce que fait le cache de pages si la mémoire est soudainement une exigence.

La mémoire sauvegardée de façon anonyme est une autre affaire. La mémoire de cette région est anonyme car, bien qu'il n'y ait aucun fichier sur le disque qui contienne réellement ces données. Ceci est normalement composé de la pile d'application, du tas, de tout ce qui se trouve dans tmpfs et des données mmappées qui sont privées et ont été modifiées (car il ne peut pas synchroniser ce contenu sur le disque). Comme il n'y a tout simplement pas de fichier valide sur le système de fichiers pour réécrire ces pages si elles changent, la mémoire sauvegardée de manière anonyme est sauvegardée par le support d'échange.

Maintenant, le noyau sait que lorsque la mémoire est rare, il est beaucoup moins cher de supprimer la mémoire sauvegardée par fichier que la mémoire mappée de manière anonyme, c'est parce que les données anonymes ont beaucoup plus de chances d'être "sales" que les données sauvegardées par fichier, en fait par défaut le noyau évalue la mémoire sauvegardée de manière anonyme comme étant 80 fois plus précieuse que la mémoire sauvegardée sur fichier et c'est en fait ce que fait le modificateur swappiness sur linux (voir ce post ici si vous voulez savoir exactement ce que le paramètre swappiness modifie).

Le pire des cas

Le pire des cas quand un serveur devient incontrôlable et OOMing est basé sur le fait qu'il passe beaucoup trop de temps à gérer les demandes d'E / S qu'à honorer les demandes d'allocation de mémoire. Deux conditions peuvent invoquer ce critère.

  • Permutation permanente de la mémoire anonyme pour récupérer les pages demandées ou allouer plus de pages à une application.
  • Passer trop de temps à extraire des données du disque car ce n'est pas en mémoire que vous donnez pour exécuter des processus qui demandent du temps CPU.

Le premier est le problème généralement pensé. Autrement dit, étant donné qu'une grande partie de la mémoire se trouve à l'intérieur du swap, il faut remplacer la mémoire anonyme de la RAM, la remettre dans le swap, puis prendre quelque chose du swap et la mettre dans la vraie RAM. Cette opération est très coûteuse, ralentissant la machine au point où elle peut devenir une situation irrécupérable (car plus de choses font la queue pour les demandes de pages que ce qui peut être servi à partir des E / S).

Le second est moins pris en compte mais tout aussi important. Si vous allouez presque toute votre mémoire à des données d'application réelles - vous ne durerez pas longtemps. Presque toutes les applications dépendent de la lecture des fichiers du système de fichiers pour fonctionner, cela peut être dû au fait que certaines instructions vivent dans une bibliothèque partagée ou parce que vous devez lire /etc/resolv.conf pour un appel à la bibliothèque ou à toute autre fin. Il est tout à fait plausible d'arrêter un système d'exploitation - tout en disposant de suffisamment de mémoire pour s'adapter à toutes vos applications, mais puisque votre file d'attente demande tellement d'E / S, rien n'a une chance de se terminer correctement.

Ce que le noyau veut faire avec votre échange

Le noyau veut utiliser votre swap pour se débarrasser des pages qui gaspillent de la mémoire afin de pouvoir utiliser cette mémoire pour autre chose.

Fondamentalement, en fonctionnement normal, le noyau aime remplir agressivement le cache des pages avec des données lues sur le disque, ce qui signifie qu'il ne lira pas le disque pour les mêmes données. C'est une bonne conception et peut réduire considérablement les E / S. Maintenant, il se peut que vous ayez une application en mémoire qui dort pendant 3 jours, se réveille, fait beaucoup de travail puis dort encore 3 jours.

Ce que le noyau aimerait faire avec ces données, c'est de les échanger pour faire de la place pour l'activité du système de fichiers, car vous avez beaucoup plus de chances d'utiliser ces pages plus souvent que les pages que vous utilisez pour votre application. L'échange, dans ce sens, pourrait être une transaction de 16 Ko sur votre support d'échange que vous ne devriez pas ressentir, mais en retour, vous avez libéré 16 Ko de mémoire qui pourraient être utilisés pour stocker quatre fichiers de données.

Pour quoi le noyau ne veut pas utiliser le swap

Le noyau ne veut certainement pas utiliser votre swap pour allouer plus de mémoire anonyme en échangeant une autre mémoire anonyme, c'est la situation qui inquiète le plus et à juste titre.

Cependant, je dois souligner que si vous avez alloué tellement de mémoire que le noyau n'a pas d'autre choix que de le faire, c'est un problème de configuration des administrateurs système, pas du noyau lui-même - il essaie simplement de faire de son mieux par les options que vous lui avez données!

Si vous avez une énorme quantité de swap, augmentez-vous les chances de l'utiliser?

Non! Si vous avez 1G de RAM et 4G de swap, il n'y a pas 80% de chances que vos données soient échangées! Le noyau veut utiliser l'échange uniquement lorsque les pages en mémoire peuvent être mieux servies en faisant autre chose!

Est-il avantageux de ne pas utiliser du tout de swap

Je ne ferais jamais ça. L'échange permet à l'O / S de se débarrasser de la mémoire dont vous avez besoin mais n'est jamais utilisée. Si vous n'avez pas d'échange, vous avalez simplement de la mémoire que vous ne récupérerez jamais, pour laquelle vous pourriez voir une amélioration significative des performances en permettant, par exemple, au cache de page de l'avoir à la place.

Quel est le meilleur échange à avoir

En théorie, découvrez la quantité de mémoire résidente + 20% pour les sécurités comme les appels de bibliothèque entrants qui doivent allouer de la mémoire à partir du tas - puis définissez votre swap à ce montant. Cela permettrait (théoriquement de toute façon) au système d'exploitation d'échanger toute la mémoire anonyme s'il devait faire place à quelque chose de plus utile.

Si j'ai la possibilité pour le noyau d'échanger tout ce qui est dangereux, non?

N'oubliez pas que le noyau ne veut pas permuter pour faire place à une allocation de mémoire plus anonyme ici, il ne fera que permuter les pages non utilisées pour favoriser autre chose qui fera un meilleur usage de l'espace à la place.

Si vous échangez de la mémoire anon uniquement pour l'allouer à partir d'une mémoire plus anonyme, vous faites quelque chose de mal et avez besoin de plus de RAM ou de réaccorder votre pile d'applications de toute façon.

De combien de RAM auriez-vous besoin

Bien sûr, vous devez autoriser suffisamment de RAM pour exécuter toutes vos applications, mais vous devez probablement prévoir 2 Go de RAM supplémentaires pour que le cache de page se remplisse - peut-être plus. Le cache de page rend votre ordinateur beaucoup plus rapide et vos disques durent plus longtemps. Si vous envisagez d'exécuter un serveur Web, en avoir encore plus pour pagecache est une bonne idée en raison de la quantité considérable de contenu statique que vous pouvez récupérer et réutiliser à partir de pagecache qui serait servi (si le débit de votre serveur Web est de 5 Mo / s, vous n'avez vraiment pas voulez récupérer le contenu de 5 Mo / s que vous générez depuis votre disque!).

Que faire si vous ne faites vraiment pas confiance à Linux pour échanger correctement

Si vous êtes vraiment inquiet, vous pouvez allouer plus de mémoire que vous n'en avez:

  • Définissez le montant de votre swap pour qu'il ne dépasse pas votre RAM
  • Définissez / proc / sys / vm / overcommit_memory sur 2
  • Définissez / proc / sys / vm / overcommit_ratio comme une valeur qui ne peut jamais dépasser les limites physiques de la RAM. Consultez la documentation du noyau pour savoir ce que ce nombre serait pour vous.

Quelle est la meilleure façon de régler ma mémoire pour mon application

  • Comprenez ce que fait la permutation.
  • Utilisez CGroups pour allouer les ressources correctes par application.
  • Modifiez le mode de surcharge mentionné ci-dessus pour que le système d'exploitation applique des limites strictes.
  • Utilisez cgroups comme ci-dessus pour définir les priorités du MOO sur les applications que vous souhaitez vraiment conserver si vous manquez de mémoire et l'application que vous voulez vraiment abandonner si vous manquez de mémoire.

Le vendeur recommande une configuration différente.

Écoutez cela à la place. Certaines applications sont écrites de telle manière qu'elles invoquent délibérément le noyau pour que leurs pages soient actives sur toutes les autres. Pour être honnête, c'est une astuce désagréable, mais elle brise la capacité des noyaux à gérer de manière transparente la mémoire lorsqu'elle se produit. Si votre fournisseur vous donne des détails, il tombe probablement dans cette catégorie et écoute ce qu'il dit à la place.

En résumé

  • Swap est destiné à être utilisé comme un endroit pour mettre la mémoire perdue. Pas comme «mémoire de rechange»
  • Avoir d'énormes quantités de swap n'a aucun effet sur vos chances de l'utiliser.
  • Le noyau veut vraiment vous empêcher d'accéder au disque pour vos données. Cela s'applique tout autant - sinon plus également - au cache de pages qu'à l'échange d'espace.
  • Le noyau fera de son mieux pour respecter le paramètre que vous lui attribuez aux applications que vous exécutez. Mais ne soyez pas surpris si vous OOM si vous avez 500 enfants apache qui occupent tous 32M de mémoire. C'est un défaut de la configuration que vous choisissez, pas de la gestion de la mémoire.

Le noyau fait généralement un très bon travail de gestion correcte de la mémoire virtuelle. C'est presque toujours le cas que votre application alloue plus de mémoire que vous ne pourriez espérer travailler et c'est ce qui cause un MOO.

Le swap était utilisé comme «mémoire de secours», mais ce n'est plus son objectif principal, alors ne pensez pas à l'utiliser comme ça. Au lieu de cela, sachez que votre noyau sait probablement mieux à quoi il veut utiliser votre mémoire. Donnez-lui de l'espace pour prendre ces décisions et vous bénéficierez d'une amélioration globale des performances.

Matthew Ife
la source
2

Extrait du document "Oracle 10g Server on Red Hat® Enterprise Linux® 5 Deployment Recommendations".

Oracle fournit des recommandations génériques concernant la taille du swap dans la note MetaLink 169706.1. Ces recommandations peuvent conduire à la création d'un très grand espace de swap sur les systèmes avec une grande quantité de mémoire. Le très grand échange peut entraîner une dégradation importante des performances du système et peut être résolu en réduisant l'espace d'échange. Red Hat ne recommande pas d'allouer plus de 4 Go pour l'échange sur Red Hat Enterprise Linux 5.

Donc, pour 16 Go, vous ne devriez pas avoir plus de 4 Go de swap.

PS. Il convient également de noter que l'appel oomest presque toujours meilleur qu'un processus de remplacement inutilisable utilisant une bande passante d'E / S entière.

SaveTheRbtz
la source
-1

D'après ce que je me souviens de la documentation Linux: Si votre RAM est supérieur à 2 Go, vous échangez = (ramSize + 2). Si c'est moins, vous échangez = (ramSize * 2)

MKN Web Solutions
la source
-2

J'ai trouvé ce document pour vous, il devrait vous aider à prendre cette décision, le voici: Qu'est-ce que Swap Space? , mais aucune des réponses ci-dessus n'est correcte

alexus
la source
1
Le document auquel vous avez lié n'est pas d'accord avec lui-même. Suivre la règle déclarée de «pour plus de RAM 2 Go de RAM supérieure à 2 Go» donnerait un échange de 1 Go pour la RAM 3 Go (3-2 = 1) et non le 5 Go.
David Spillett