Suite à une discussion ICI sur la PHP-FPM
consommation de mémoire, je viens de découvrir un problème de lecture de la mémoire dans la top
commande. Voici une capture d'écran de mon top
juste après le redémarrage PHP-FPM
. Tout est normal: environ 20 PHP-FPM
processus, chacun consommant 5,5 Mo de mémoire (0,3% du total).
Voici l'ancien serveur juste avant le redémarrage de PHP-FPM
(un jour après le redémarrage précédent). Ici, nous en avons encore environ 25 PHP-FPM
avec une double utilisation de la mémoire (10 Mo indiquant 0,5% du total). Ainsi, la mémoire totale utilisée devrait être de 600 à 700 Mo. Alors, pourquoi une mémoire de 1,6 Go a-t-elle été utilisée?
free
sont identiques.Réponses:
TL; DR 1
Votre serveur se trouve dans une sorte de conteneur virtuozzo / openvz / virtualization-du-jour . Essayer de donner un sens à l'utilisation de la mémoire consiste à incliner les moulins à vent.
TL; DR 2
Linux a mangé votre RAM! Mais ça va, ça le fait pour tout le monde.
La longue histoire
Décomposons-le!
Dans la
Mem:
section, nous avons:$n total
: la quantité de RAM physique dans votre machine$n used
: la quantité de mémoire consommée par Linux, pas seulement la somme des processus.$n free
: Quelle quantité de RAM n'est pas consommée par Linux. Cela ne tient pas compte du fait que la mémoire mise en cache et tamponnée est par essence «libre».$n buffers
: l'espace tampon est l'endroit où les blocs d'E / S disque ayant été lus ou en attente d'écriture sont stockés. Un tampon est une représentation RAM d'un seul bloc de disque.Dans la
Swap:
section, nous avons:$n total
: Auto-explicatif. Quantité d'espace disque disponible pour échanger des pages.$n used
: Auto-explicatif. Combien d'espace d'échange de disque est utilisé.$n free
: Herp Derp.$n cache
: Étroitement lié aux tampons ci-dessus. Il fait en fait partie du cache de pages et n'a lui-même aucun espace sur le disque physique. Ne vous inquiétez pas des détails de cette conversation.La partie intéressante survient lorsque vous courez
free -m
. Vous verrez trois lignes, et tous les nombres seront en corrélation avec le haut. Je vais donner mon propre PC comme exemple:La ligne Mem montre la RAM totale en mégaoctets (
$n total
en haut), combien est utilisée ($n used
en haut), combien est gratuite ($n free
en haut), combien est partagée (ignorez cela), et maintenant vient la bonne partie! Les colonnesbuffers
et sontcached
enfree -m
corrélation avec, comme on pouvait le prévoir,$n buffers
et$n cache
. Mais jetez un oeil à la deuxième rangéefree -m
qui commence par-/+ buffers/cache:
. Le calcul montre que le montant utilisé est vraiment (total) - ((used-buffers) -cached). Free est (total) - (theNewUsed).Qu'est-ce que tout cela signifie? Cela signifie que Linux a mangé votre RAM! La courte histoire est que le noyau Linux engloutit la RAM car il est disponible pour la mise en cache du disque. Vous ne pouvez rien y faire à moins d'avoir envie de compiler un noyau personnalisé. Conseil de pro: ne le faites pas.
La RAM est vraiment là et gratuite pour les processus à utiliser à leur guise. C'est ce que l'on entend par la
-/+ buffers/cache:
rangéefree -m
. Cependant, vous êtes à l'intérieur d'un conteneur de virtualisation non hyper-visor, ce qui rend les choses un peu sordides. Vous ne pouvez tout simplement pas faire le point sur votre mémoire avec une précision d'octet à ce stade. Cependant, vous ne voyez aucun comportement terriblement inhabituel.Garder le calme et continuer. Obtenez également un serveur physique (sauf si vous aimez les statistiques de mémoire qui ressemblent à Kreskin est votre SysAdmin).
la source
Top n'est pas le meilleur moyen de vérifier l'utilisation de la mémoire. Cependant, comme ma question a été marquée comme un double de cette question, je vais publier ma résolution ici.
J'ai lu sur un forum que ps_mem.py vérifiera l'utilisation de la mémoire pour vous.
Référentiel: https://github.com/pixelb/ps_mem/
Télécharger:
Usage:
Sortie:
la source