Comment mesurer la mémoire RSS totale occupée par un ensemble de processus (fourchus), sans compter deux fois les pages partagées et les copies sur écriture?
Comment mesurer la mémoire RSS totale occupée par un ensemble de processus (fourchus), sans compter deux fois les pages partagées et les copies sur écriture?
Réponses:
J'ai fini par écrire mon propre utilitaire pour cela: https://gist.github.com/Eugeny/04ccfe8accf4bc74b0ca
Je l'ai exécuté contre init
(pid 1) pour les tests et le total rapporté équivaut à peu près à l'utilisation physique du ram (selon htop), donc je suppose que c'est quelque peu correct.
Exemple d'utilisation:
~ » pstree -ap 15897
zsh,15897
└─sudo,9783 make rundev
└─make,9784 rundev
└─sh,9785 -c cd ajenti-panel && ./ajenti-panel -v --autologin --plugins ../plugins --dev
└─python ./ajenti,9786
├─./ajenti-panel ,9834
├─./ajenti-panel ,9795
└─{python ./ajenti},9796
~ » sudo ./memuse.py 15897
PID Commandline Frames (+unique) VMEM
- 15897 (/usr/bin/zsh ): 1776 +1776 7104 KB
- 9783 (sudo make rundev ): 608 +408 2432 KB
- 9784 (make rundev ): 261 +98 1044 KB
- 9785 (/bin/sh -c cd ajenti-panel && ): 166 +48 664 KB
- 9786 (python ./ajenti-panel -v --aut): 9279 +8977 37116 KB
- 9795 (./ajenti-panel worker [restric): 7637 +1334 30548 KB
- 9834 (./ajenti-panel worker [session): 8972 +2639 35888 KB
----------------------------------------------------------------------------------------
TOTAL: 15280 61120 KB
Il n'y a aucun moyen clairement défini de déterminer dans un outil que je connais quels processus partagent quelles cartes sans itérer à travers tous les mappages et comparer les adresses.
Cependant, Linux offre une estimation raisonnable connue sous le nom de taille de jeu proportionnelle . Ceci est rapporté dans / proc / [pid]> / maps.
Cette valeur est la taille du mappage divisée par le nombre de frères et sœurs / processus parents avec le même mappage ouvert.
Ainsi, avec un programme qui a un mappage de 1 Mo ouvert, plus un 1 Mo partagé avec 4 autres processus, la taille de jeu proportionnelle est de 1 Mo + 1 (1 Mo / 4) ou 1 250 Mo. Le RSS dans ce cas serait de 2 Mo.
Il existe un patch pour htop flottant qui utilisera le PSS pour calculer une «bonne estimation» de la mémoire réelle utilisée.
/proc/*/map
fichiers, même si je n'ai jamais trouvé d'outil qui pourrait le faire. Le principal problème est que les structures de données à suivre sont beaucoup plus complexes qu'elles ne le semblent. Si vous n'obtenez pas une bonne réponse ici, vous pouvez aussi essayer unix SE.