923 votes

Comment mesurer l’utilisation de la mémoire réelle d’une application ou un processus ?

Comment mesurez-vous l'utilisation de la mémoire d'une application ou d'un processus dans Linux?

À partir de l'article du blog de la Compréhension de l'utilisation de la mémoire sous Linux, "ps" n'est pas un outil précis à utiliser pour cette intention.

Pourquoi le ps est "mauvais"

Selon la façon dont vous le regardez, le ps n'est pas de déclaration au réel l'utilisation de la mémoire du processus. Ce qu'il est vraiment en train de faire est de montrer comment beaucoup de vrai la mémoire de chaque processus prendrait s'il était le seul processus en cours d'exécution. Bien sûr, un type de machine Linux dispose de plusieurs dizaines de processus en cours d'exécution à un moment donné, ce qui signifie que la VSZ RSS chiffres rapportés par le ps sont presque certainement les "mauvais".

446voto

ypnos Points 21940

Avec ps ou d'autres outils similaires, vous obtenez seulement la quantité de pages de mémoire allouée par ce processus. Ce numéro est correct, mais:

  • ne reflète pas la réelle quantité de mémoire utilisée par l'application, seule la quantité de mémoire réservée pour elle

  • peut être trompeur si les pages sont partagés, par exemple par plusieurs threads ou par l'aide liée de façon dynamique les bibliothèques

Si vous voulez vraiment savoir quelle quantité de mémoire de votre application utilise en fait, vous devez l'exécuter à l'intérieur d'un profiler. Par exemple, valgrind peut vous donner des idées au sujet de la quantité de mémoire utilisée, et, plus important encore, au sujet d'éventuelles fuites de mémoire dans votre programme.

353voto

Anil Points 719

Essayez la commande pmap :

212voto

Dustin Points 4694

Difficile à dire, mais voici deux "fermer" les choses qui peuvent aider.

$ ps aux 

vous donnera la Taille Virtuelle (VSZ)

Vous pouvez également obtenir des statistiques détaillées de système de fichiers /proc en allant dans /proc/$pid/statut

Le plus important est le VmSize, qui devrait être proche de ce "ps aux" donne.

/proc/19420$ cat état
Nom: firefox
État: S (sleeping)
Tgid: 19420
Pid: 19420
PPid: 1
TracerPid: 0
Uid: 1000 1000 1000 1000
Gid: 1000 1000 1000 1000
FDSize: 256
Les groupes: 4 6 20 24 25 29 30 44 46 107 109 115 124 1000 
VmPeak: 222956 ko
VmSize: 212520 ko
VmLck: 0 ko
VmHWM: 127912 ko
VmRSS: 118768 ko
VmData: 170180 ko
VmStk: 228 ko
VmExe: 28 ko
VmLib: 35424 ko
VmPTE: 184 ko
Threads: 8
SigQ: 0/16382
SigPnd: 0000000000000000
ShdPnd: 0000000000000000
SigBlk: 0000000000000000
SigIgn: 0000000020001000
SigCgt: 000000018000442f
CapInh: 0000000000000000
CapPrm: 0000000000000000
CapEff: 0000000000000000
Cpus_allowed: 03
Mems_allowed: 1
voluntary_ctxt_switches: 63422
nonvoluntary_ctxt_switches: 7171

162voto

Paul Biggar Points 7108

Dans les versions récentes de linux, utilise le sous-système smaps . Par exemple, pour un processus avec un PID de 1234 :

Il vous dira exactement la quantité de mémoire qu’il utilise à ce moment-là. Plus important encore, elle divise la mémoire en privé et partagé, afin que vous puissiez dire combien de mémoire utilise votre instance du programme, sans inclure la mémoire partagée entre plusieurs instances du programme.

142voto

Bash Points 1680

Il n’y a pas de moyen facile de calculer cela. Mais certaines personnes ont essayé d’obtenir quelques bonnes réponses :

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X