Je suis un peu confus sur certains des résultats que je vois de ps et gratuit .
Sur mon serveur, c'est le résultat de free -m
[[email protected] ~]# free -m
total used free shared buffers cached
Mem: 2048 2033 14 0 73 1398
-/+ buffers/cache: 561 1486
Swap: 2047 11 2036
Ma compréhension de la façon dont Linux gère la mémoire est qu'il stockera l'utilisation du disque dans la RAM, de sorte que chaque accès ultérieur soit plus rapide. Je crois que cela est indiqué par les colonnes "en cache". De plus, divers tampons sont stockés dans la RAM, indiqués dans la colonne "tampons".
Donc, si je comprends bien, l'utilisation "réelle" est censée être la valeur "utilisée" de "-/+ tampons/cache", ou 561 dans ce cas.
Donc, en supposant que tout cela est correct, la partie qui me jette est le résultat de ps aux
.
Ma compréhension du ps
résultats, est que la 6ème colonne (RSS), représente la taille en kilo-octets que le processus utilise pour la mémoire.
Donc quand j'exécute cette commande :
[[email protected] ~]# ps aux | awk '{sum+=$6} END {print sum / 1024}'
1475.52
Le résultat ne devrait-il pas être la colonne "utilisé" de "-/+ tampons/cache" de free -m
?
Alors, comment puis-je déterminer correctement l'utilisation de la mémoire d'un processus sous Linux ? Apparemment, ma logique est erronée.
Réponse acceptée :
Copier/coller sans vergogne ma réponse de serverfault l'autre jour 🙂
Le système de mémoire virtuelle Linux n'est pas si simple. Vous ne pouvez pas simplement additionner tous les champs RSS et obtenir la valeur rapportée used
par free
. Il y a plusieurs raisons à cela, mais je vais en citer quelques-unes parmi les plus importantes.
-
Lorsqu'un processus bifurque, le parent et l'enfant s'afficheront avec le même RSS. Cependant, Linux utilise la copie sur écriture afin que les deux processus utilisent réellement la même mémoire. Ce n'est que lorsque l'un des processus modifie la mémoire qu'elle sera réellement dupliquée.
Cela provoquera lefree
le nombre doit être plus petit que letop
Somme RSS. -
La valeur RSS n'inclut pas la mémoire partagée. Étant donné que la mémoire partagée n'appartient à aucun processus en particulier,
top
ne l'inclut pas dans RSS.
Cela entraînera lefree
le nombre doit être plus grand que letop
Somme RSS.