Fragmentation de la mémoire Linux
Y a-t-il un moyen de détecter la fragmentation de la mémoire dans Linux? Cela est dû au fait que sur certains serveurs de travail longs, j'ai remarqué une diminution de la productivité et seulement après le redémarrage du processus, j'ai vu une meilleure performance. Je l'ai remarqué plus lorsque vous utilisez des pages énormes Linux - Énormes pages B. Linux Sont plus sensibles à la fragmentation?
En particulier, j'ai vu / proc / buddyinfo. Je veux savoir s'il y a de meilleurs moyens (Pas seulement des équipes CLI En tant que tel, tout programme ou fondations théoriques conviendra.), Regarder ça.
En particulier, j'ai vu / proc / buddyinfo. Je veux savoir s'il y a de meilleurs moyens (Pas seulement des équipes CLI En tant que tel, tout programme ou fondations théoriques conviendra.), Regarder ça.
Aucun résultat connexe trouvé
Invité:
Pour répondre aux questions, connectez-vous ou registre
4 réponses
Dominique
Confirmation de:
étiqueter. Ma réponse ne concerne que
Linux
.
Oui, d'énormes pages sont plus susceptibles à la fragmentation. Il y a deux types de mémoire: une qui obtient votre processus (Virtuel), et deuxième à laquelle le noyau gère (Réel). Plus n'importe quelle page, plus il sera difficile de regrouper (Et enregistrer) Ses voisins, surtout lorsque votre service fonctionne dans un système, qui devrait également soutenir les autres, qui sont alloués par défaut et écrivent à beaucoup plus de mémoire qu'ils n'utilisent en fin de compte.
Afficher le noyau (Réel) Les adresses fournies sont privées. Il y a une très bonne raison pour laquelle l'espace utilisateur les voit comme il représente le noyau, car le noyau devrait pouvoir remplacer, sans confondre l'espace utilisateur. Votre processus devient beau, continu
"Diseneyfid"
espace d'adresses dans lequel travailler, ne prêtant pas attention à ce qui est en réalité un noyau
Fabriquer
Avec cette mémoire dans les coulisses.
La raison pour laquelle vous voyez une réduction des performances des serveurs de travail longs est susceptible d'être associée à des blocs dédiés qui n'ont pas été explicitement bloqués (par exemple,
/
ou
) Et pendant longtemps n'a pas changé, étaient
Déchargé
, Ce qui signifie que votre service se déplace sur le disque quand il doit être lu. Changer ce comportement fait votre processus
Mauvais voisin
, Tant de gens placent leur SGBD sur un serveur complètement différent de celui de web / php / python / ruby / autre chose. La seule façon raisonnable de le réparer. - Réduire la concurrence pour les blocs adjacents.
La fragmentation est vraiment perceptible (Dans la plupart des cas), Quand page A est en mémoire et la page B Déplacé à glisser. Naturellement, le redémarrage de votre service apparemment "guérir", mais seulement parce que le noyau n'a pas encore été en mesure d'apporter le processus (à présent) Des blocs nouvellement isolés dans son coefficient de fixation excessive.
En fait, redémarrer (Disons) 'apache' Avec une charge élevée, il convient probablement d'envoyer des blocs appartenant à d'autres services directement sur le disque. Donc oui apache peut s'améliorer pendant une courte période, mais mysql Peut souffrir ... Au moins, tant que le noyau les pousse à souffrir de manière égale, quand il suffit de ne pas assez de mémoire physique.
Ajouter plus de mémoire ou diviser exigeant
Création de consommateurs :) Ce n'est pas simplement une fragmentation pour laquelle vous devez regarder.
Essayer
Obtenir un aperçu de ce qui est réellement stocké.
Babette
Confirmation de:
Pour obtenir l'index de fragmentation actuel, utilisez:
Pour défragmenter la mémoire du noyau, essayez d'exécuter:
Vous pouvez également désactiver des pages d'énormes pages transparentes (Aussi connu sous le nom THP) et / Ou désactiver le podcast (Ou diminuer
).
Espace utilisateur
Pour réduire la fragmentation de l'espace utilisateur, vous pouvez essayer un autre distributeur, par exemple
(Il est excellent
https://github.com/jemalloc/je ... stics
, Qu'est-ce qui vous donnera une idée de la fragmentation interne du distributeur).
Vous pouvez basculer sur personnalisable malloc, Recompilation de votre programme avec elle ou en exécutant simplement votre programme avec
:
(il faut se méfier
https://www.digitalocean.com/c ... tors/
)
Bien qu'il soit un peu non lié à la fragmentation de la mémoire (Mais associé au sceau / Mémoire en migration), Vous voulez probablement exécuter plusieurs instances de votre service, un pour chaque noeud NUMA, et attachez-les avec
.
Babette
Confirmation de:
Documentation par Linux Sur des pages énormes:
http://lwn.net/Articles/375098/
Il y a une circonstance dans laquelle la fragmentation de la mémoire peut entraîner une allocation lente de pages énormes. (Mais pas où d'énormes pages
cause
Fragmentation de la mémoire), Et ceci est si votre système est configuré pour augmenter le pool de pages énormes sur la demande d'application. Si un / proc / sys / vm / nr_overcommit_hugepages plus que / proc / sys / vm / nr_hugepages, Cela peut arriver.
Blanche
Confirmation de:
Ce qui est très utile. Il est plus utile avec un format de sortie magnifique, par exemple ce scénario Python peut:
https://gist.github.com/labeneator/9574294
Pour d'énormes pages, vous avez besoin de fragments libres 2097152 (2 Mb) ou plus. Pour des pages énormes transparentes, il rétrécit automatiquement lorsque le noyau le demande, mais si vous voulez voir combien vous pouvez obtenir, courir au nom de root:
En outre, oui, d'énormes pages causent de gros problèmes de fragmentation. Ou vous ne pouvez pas obtenir d'énormes pages ou leur présence fait que le noyau passe beaucoup de temps supplémentaire à essayer de les obtenir.
J'ai une solution qui me convient. Je l'utilise sur plusieurs serveurs et sur mon ordinateur portable. Cela fonctionne bien avec des machines virtuelles.
Ajouter
Dans la ligne de commande du noyau Linux. Sur mon serveur j'utilise 8G. Soyez prudent avec le nombre car il empêchera votre noyau de souligner quoi que ce soit en dehors de cette mémoire. Les serveurs nécessitant de nombreux tampons de prise ou qui gèrent un streaming du disque à des centaines de disques ne produiront pas de telles restrictions. Toute allocation de mémoire qui doit être «inscrite» pour slab ou DMA, fait référence à cette catégorie.
Tout le reste de la mémoire devient "mobile", ce qui signifie qu'il peut être pressé dans de beaux fragments pour mettre en évidence des pages énormes. Maintenant, les énormes pages transparentes peuvent vraiment décoller et travailler au besoin. Quand le noyau est requis plus 2M pages, il peut simplement réaffecter des pages 4K à un autre endroit.
Et je ne suis pas tout à fait sûr de savoir comment il interagit avec une introduction directe avec une copie zéro. La mémoire dans la "zone mobile" ne doit pas être corrigée, mais la demande directe d'E / S le fera en particulier pour DMA. Il peut le copier. En tout cas, il peut l'attacher dans la zone mobile. En tout cas, ce n'est probablement pas exactement ce dont vous avez besoin.