Comment mesurer l'utilisation réelle de la mémoire d'une application ou d'un processus ?
Cette question est traitée ici de manière très détaillée.
Comment mesurer l'utilisation de la mémoire d'une application ou d'un processus sous Linux ?
D'après l'article du blog [Comprendre l'utilisation de la mémoire sous Linux][2], ps
n'est pas un outil précis à utiliser dans ce but.
Pourquoi
ps
est "incorrect".Selon la façon dont vous le regardez,
ps
ne rapporte pas l'utilisation réelle de la mémoire des processus. Ce qu'il fait réellement, c'est montrer combien de mémoire réelle chaque processus prendrait s'il était le seul processus en cours d'exécution. Bien sûr, une machine Linux typique a plusieurs douzaines de processus en cours d'exécution à tout moment, ce qui signifie que les nombres VSZ et RSS indiqués parps
sont presque certainement faux.
[2] : http://virtualthreads.blogspot.com/2006/02/understanding-memory-usage-on-linux.html
Avec
ps
ou des outils similaires, vous obtiendrez seulement la quantité de pages de mémoire allouées par ce processus. Ce nombre est correct, mais :ne reflète pas la quantité réelle de mémoire utilisée par l'application, seulement la quantité de mémoire qui lui est réservée
peut être trompeur si les pages sont partagées, par exemple par plusieurs threads ou par l'utilisation de bibliothèques liées dynamiquement.
Si vous voulez vraiment savoir quelle quantité de mémoire votre application utilise réellement, vous devez l'exécuter avec un profileur. Par exemple,
valgrind
peut vous donner des indications sur la quantité de mémoire utilisée, et, plus important encore, sur les éventuelles fuites de mémoire dans votre programme. L'outil de profilage de tas de valgrind s'appelle 'massif' :Comme expliqué dans la [documentation valgrind][1], vous devez exécuter le programme à travers valgrind :
Massif écrit un dump d'instantanés d'utilisation de la mémoire (par exemple
massif.out.12345
). Ceux-ci fournissent, (1) une chronologie de l'utilisation de la mémoire, (2) pour chaque instantané, un enregistrement de l'endroit où la mémoire a été allouée dans votre programme. Un excellent outil graphique pour analyser ces fichiers est [massif-visualizer][2]. Mais j'ai trouvé quems_print
, un simple outil textuel livré avec valgrind, était déjà d'une grande aide.Pour trouver les fuites de mémoire, utilisez l'outil (par défaut)
memcheck
de valgrind.[1] : http://valgrind.org/docs/manual/ms-manual.html [2] : https://github.com/KDE/massif-visualizer
Difficile à dire avec certitude, mais voici deux choses proches qui peuvent aider.
vous donnera la taille virtuelle (VSZ)
Vous pouvez également obtenir des statistiques détaillées à partir du système de fichiers /proc en allant dans
/proc/$pid/status
.Le plus important est la VmSize, qui devrait être proche de ce que donne
ps aux
.Procurez-vous valgrind. Donnez-lui votre programme à exécuter, et il vous en dira long sur son utilisation de la mémoire.
Cela ne s'applique que dans le cas d'un programme qui s'exécute pendant un certain temps et s'arrête. Je ne sais pas si valgrind peut mettre la main sur un processus déjà en cours d’exécution ou sur des processus qui ne doivent pas s’arrêter, comme les démons.