J'ai un hôte de production, ci-dessous:
Le système utilise 1 Go d’échange, tout en conservant près de 40 Go d’espace mémoire libre et inutilisé. Devrais-je m'inquiéter à ce sujet ou est-ce surtout normal?
centos
performance
memory
swap
MrDuk
la source
la source
free -m
. Les graphiques sont difficiles à lire.Réponses:
Ce n'est pas un problème et c'est probablement normal. Beaucoup de code (et éventuellement de données) est utilisé très rarement, de sorte que le système l'échangera pour libérer de la mémoire.
L’échange n’est généralement un problème que si la mémoire est constamment échangée. C'est ce type d'activité qui tue les performances et suggère un problème ailleurs sur le système.
Si vous souhaitez surveiller votre activité de swap, vous pouvez utiliser plusieurs utilitaires, mais cela
vmstat
est généralement très utile, par exemple:Ignorez la première ligne car il s'agit d'une activité depuis le démarrage du système. Notez les colonnes
si
etso
sous---swap--
; ils devraient généralement être assez petits sinon 0 pour la plupart du temps.Il convient également de mentionner que cette permutation préventive peut être contrôlée avec un paramètre de noyau. Le fichier at
/proc/sys/vm/swappiness
contient un nombre compris entre 0 et 100 qui indique au noyau comment échanger de manière agressive la mémoire. Cat le fichier pour voir ce que cela est défini. Par défaut, la plupart des distributions Linux fixent ce nombre à 60, mais si vous ne voulez voir aucune permutation avant que la mémoire ne soit épuisée, écrivez un 0 dans le fichier comme ceci:Cela peut être rendu permanent en ajoutant
à
/etc/sysctl.conf
.la source
echo 0 >/proc/sys/vm/swappiness
. Cela peut être rendu permanent en ajoutantvm.swappiness = 0
à /etc/sysctl.conf.swappiness=7
ou quelque chose, les pages inutilisées à long terme sont échangées. Il y a une grande différence entreswappiness=0
et toute autre valeur, même les plus faibles. La valeur par défaut du noyauswappiness=60
est généralement bonne pour les serveurs, et ce n'est que pour une utilisation interactive de bureau où un faible swappiness est bon. Mais le régler à 7 ou quelque chose ne devrait pas faire trop mal. (Mais je n'ai pas vérifié, je ne suis pas un administrateur système).swappiness
fonctionne très bien.swappiness=7
Sous la pression, vous constaterez que le cache de fichiers est presque totalement inutilisé pendant une période prolongée, alors qu'ilswappiness=60
liquide beaucoup de mémoire cache mais commence également à être échangé en quelques secondes. C'est toujours le cache qui prend le dessus, mais d'une manière beaucoup plus équilibrée.Linux écrira de manière préventive les pages sur le disque s’il n’a rien de mieux à faire. Cela ne signifie toutefois pas qu'il expulsera ces pages de la mémoire. C'est juste que dans le cas où il devrait expulser ces pages un jour ou l'autre, il n'a pas besoin d'attendre qu'elles soient écrites sur disque, car elles sont déjà là.
Après tout, la raison pour laquelle vous manquez de mémoire est probablement parce que votre machine travaille déjà déjà dur, vous ne voulez pas non plus la surcharger de permutation. Mieux vaut faire la permutation lorsque la machine ne fait rien.
Pour une raison similaire, votre mémoire devrait toujours être pleine. Pages de mémoire, cache de système de fichiers
tmpfs
, il y a tellement de choses qui pourraient être gardées en mémoire. Vraiment, vous devriez être inquiet si votre mémoire est vide; après tout, vous en avez payé beaucoup (au moins par rapport à la même quantité d’espace disque), il vaut donc mieux l’utiliser!la source
L’échange utilisé n’est pas mauvais, mais beaucoup d’activités d’échange est
La colonne swapd n'est pas un problème du tout. Des valeurs non nulles sur les colonnes si et ainsi sont mortelles pour les performances du serveur. Spécialement ceux avec beaucoup de RAM.
Il est préférable de désactiver swapinness sur les machines disposant de plusieurs Go de RAM:
Cela ne désactivera pas l'échange. Il ne demandera à Linux d’utiliser le swap qu’en dernier recours. Cela va gaspiller quelques Mo de programmes qui n'ont pas besoin d'être dans la RAM ... Mais il est préférable d'échanger vos files d'attente d'accès au disque.
Edition 1: pourquoi la valeur par défaut de swappiness n'est pas optimale
Il y a deux décennies, nous nous souvenions qu'un grand 486 ne disposait que de 32 Mo de RAM. Les algorithmes de swap ont été développés lorsque la totalité de la RAM pouvait être déplacée sur le disque en une fraction de seconde. Même avec les disques les plus lents de cette époque. C'est pourquoi les stratégies de swap par défaut sont si agressives. La RAM était le goulot d'étranglement de ces jours. Depuis lors, la taille de la RAM a augmenté de plus de 10 000 fois et la vitesse du disque de moins de 10 fois. Cela a déplacé le goulot d'étranglement vers la bande passante du disque.
Edit 2: pourquoi cette activité est mortelle pour les serveurs?
Si et si l' activité sur des machines avec des tonnes de RAM est mortelle, cela signifie que le système se bat contre lui-même pour obtenir de la RAM. Qu'est-ce qui se passe, c'est que les disques, même les grands stockages, sont trop lents par rapport aux RAM. Un échange agressif favorise le cache disque du noyau par rapport aux données d'application et constitue la source la plus courante de lutte pour la RAM. Etant donné que le système d'exploitation devra libérer le cache disque à chaque emplacement , la durée de vie du cache supplémentaire fourni par le swap est trop courte pour être utile de toute façon. Le résultat est que vous utilisez la bande passante du disque pour stocker le cache qui ne sera probablement pas utilisé et que vos programmes attendent les pages si . Cela signifie que cela consomme beaucoup de ressources critiques avec peu ou pas d'avantages pour les applications.
Notez le titre de la réponse "Activité d'échange importante sur les serveurs disposant de beaucoup de RAM". Ceci ne s'applique pas aux machines avec une activité occasionnelle de type si et ainsi. Cela pourrait ne pas s'appliquer à l'avenir si des algorithmes d'échange plus intelligents sont développés dans les systèmes d'exploitation.
Edit 3: pages "froides"
Les gens romancent l'algorithme d'échange. Certains disent "cela prend des pages moins utilisées de la RAM", mais ce n'est pas du tout ce que fait le noyau. La chose est difficile à comprendre à propos de swap est le noyau ne sait pas ce qu'est une "page froide". Le noyau ne dispose pas d'une métrique permettant de déterminer si la page est utilisée ou susceptible de l'être dans un avenir proche. Pour éviter que le noyau place les pages dans le swap de manière plus ou moins aléatoire et les pages qui ne sont pas nécessaires y restent. Le problème de cet algorithme est que les pages doivent aller au swap pour savoir si les applications en ont besoin. Et cela signifie que beaucoup de pages "chaudes" iront à l'échange. Le problème, c'est que les disques sont trop lents par rapport à la RAM.
J'ai construit mon propre benchmark, un scénario réaliste très commun à de nombreuses applications avec un volume décent. D'après mes tests, je n'ai constaté aucun avantage en termes de débit ou de latence lors de l'utilisation des swaps. Loin de là. Lorsque la permutation commence, le débit et la latence sont ralentis d'au moins un ordre de grandeur.
Je vais un peu plus loin à ce sujet: je comprends que l’échange n’est pas destiné au traitement. Les échanges sont uniquement pour les urgences. Ces moments où trop d'applications sont en cours d'exécution en même temps et que vous obtenez un pic de mémoire. Sans échange, cela entraînerait des erreurs de mémoire insuffisante. Je considère l’utilisation de swap comme un échec des équipes de développement et de production. C’est une opinion qui va bien au-delà de ce dont nous avons discuté ici, mais c’est ce que je pense. Bien entendu, mes applications disposent d’une excellente gestion de la mémoire.
la source
si
plus mortel pour votre serveur quebi
? Les deux signifient qu'un programme attend 4096 octets à lire du disque vers la mémoire. Ilbi
provient de n'importe quel fichier etsi
d'une catégorie de fichiers spécifique (mais leurs octets se déplacent aussi rapidement ).swappiness=0
semble totalement inapproprié pour les serveurs. Vous pouvez le considérer comme un système de bureau interactif (mais même dans ce cas, ilswappiness=1
est préférable d’échanger éventuellement des pages vraiment froides). Voir les commentaires sur une autre réponse .swappiness=7
ou quelque chose qui réduira considérablement l’activité d’échange sans épingler les pages froides dans la RAM jusqu’à MOO, et cela vaut la peine d’être pris en compte si vous pensez que cela60
est trop swappy pour un serveur spécifique.si
c'est pire quebi
. La plupart des logiciels de serveur sont conçus sur l'hypothèse que les E / S à partir du disque peuvent être lents et utilisent des threads, des E / S asynchrones ou une autre technique pour rester réactif en général pendant l'attente des E / S. Une faute de page peut arriver n'importe où. Dans le pire des cas, une erreur de page lente pourrait se produire après un verrou, empêchant tous les autres threads d'entrer dans cette section critique pendant environ 10 ms (avec permutation sur un stockage à rotation lente). Cela peut être plausible si une section critique copie les données d'une structure de données partagée vers une page potentiellement froide.Ce n'est pas une réponse à votre question. mais plutôt, juste des informations supplémentaires pour vous aider à prendre une décision éclairée.
Si vous souhaitez savoir quels processus utilisent spécifiquement combien de swap, voici un petit script shell:
Je devrais également ajouter que les fichiers tmpfs seront également échangés. Ceci est plus courant sur les systèmes linux modernes utilisant systemd qui créent des superpositions utilisateur / tmp en utilisant tmpfs.
la source
awk '/Swap/ {sw += $2} FNR==1 { /*first line of a new file */ find the command somehow, maybe still fork/exec ps;} END { print totals }' /proc/[0-9]*/smaps
. Cela exécute cut et ps pour chaque processus et grep + awk plusieurs fois pour chaque processus du système.J'ai remarqué que la réplication de MySQL Cluster ralentissait ou échouait lorsque les agents échangeaient beaucoup. Certaines applications ne sont peut-être pas gênées par le swap ou bénéficient peut-être de certains échanges, mais les bases de données semblent en souffrir. Cependant, de nombreuses discussions que j'ai vues sur des forums ont trait à des échanges de fichiers décontextualisés à partir de la discussion sur la charge de travail spécifique.
Dans le monde des administrateurs de bases de données, le consensus semble être le suivant: "Il est de bon sens que, lorsque vous utilisez MySQL (ou tout autre système de gestion de base de données), vous ne souhaitez voir aucune entrée / sortie dans votre espace de swap. Dans le cas de MySQL, innodb_buffer_pool_size est une pratique courante pour s’assurer qu’il ya suffisamment de mémoire disponible, ainsi aucun échange n’est nécessaire.
Mais que se passe-t-il si vous faites une erreur ou une erreur de calcul et que l’échange a lieu? Dans quelle mesure cela influe-t-il vraiment sur les performances? C’est exactement ce que j’ai voulu enquêter. "
J'espère que les lecteurs trouveront les liens suivants à propos.
https://www.percona.com/blog/2017/01/13/impact-of-swapping-on-mysql-performance/
https://www.percona.com/blog/2010/01/18/why-swapping-is-bad-for-mysql-performance/
la source