Suite à une discussion faite ICI sur la façon dont PHP-FPM
consommant de la mémoire, je viens de trouver un problème lors de la lecture de la mémoire dans la commande top
. Voici une capture d'écran de mon top
juste après avoir redémarré 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 avons encore environ 25 PHP-FPM
avec 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?
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.
Linux a mangé votre RAM! Mais ça va, ça le fait pour tout le monde.
Décomposons-le!
Dans le Mem:
section nous avons:
$n total
: la quantité de physique RAM dans votre machine$n used
: la quantité de mémoire consommée par Linux, pas seulement la somme des processus.$n free
: Combien 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 bloc de disque unique.Dans le Swap:
section nous avons:
$n total
: Explicite. Quantité d'espace disque disponible pour échanger des pages.$n used
: Explicite. 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 exécutez 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:
total used free shared buffers cached
Mem: 8070 7747 323 0 253 5713
-/+ buffers/cache: 1780 6290
Swap: 5055 0 5055
La ligne Mem affiche le total RAM en mégaoctets ($n total
en haut), combien est utilisé ($n used
en haut), combien est gratuit ($n free
en haut), combien est partagé (ignorez cela), et maintenant vient la bonne partie! Les colonnes buffers
et cached
dans free -m
corrélé à, de façon prévisible, $n buffers
et $n cache
. Mais jetez un œil à la deuxième rangée, celle de free -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 RAM car il est disponible pour la mise en cache du disque. Il n'y a rien que vous puissiez faire à moins que vous ayez envie d'essayer de compiler un noyau personnalisé. Astuce Pro: Non.
Le RAM est vraiment là et gratuit pour les processus à utiliser à leur gré. C'est ce que l'on entend par le -/+ buffers/cache:
ligne dans free -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).
Top n'est pas le meilleur moyen de vérifier l'utilisation de la mémoire. Cependant, puisque ma question a été marqué comme doublon 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:
pip install ps_mem
Usage:
ps_mem
Production:
# ps_mem
Private + Shared = RAM used Program
4.0 KiB + 15.5 KiB = 19.5 KiB udevd
4.0 KiB + 16.0 KiB = 20.0 KiB mysqld_safe
4.0 KiB + 25.5 KiB = 29.5 KiB dbus-daemon
4.0 KiB + 27.5 KiB = 31.5 KiB xinetd
60.0 KiB + 14.5 KiB = 74.5 KiB epmd
108.0 KiB + 23.0 KiB = 131.0 KiB init
8.0 KiB + 135.0 KiB = 143.0 KiB saslauthd (2)
180.0 KiB + 34.0 KiB = 214.0 KiB check_scripts.s
796.0 KiB + 41.0 KiB = 837.0 KiB bash
528.0 KiB + 359.0 KiB = 887.0 KiB crond (7)
1.2 MiB + 218.0 KiB = 1.4 MiB sshd (2)
1.6 MiB + 45.0 KiB = 1.6 MiB rsyslogd
2.0 MiB + 133.0 KiB = 2.1 MiB beam.smp
1.3 MiB + 2.3 MiB = 3.6 MiB httpd (8)
12.8 MiB + 956.0 KiB = 13.8 MiB sendmail.sendmail (7)
53.5 MiB + 114.0 KiB = 53.7 MiB mysqld
317.6 MiB + 2.3 MiB = 320.0 MiB python (6)
---------------------------------
398.5 MiB
=================================