Comment mesurer la mémoire sans pages de copie sur écriture?
8
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?
Question très intéressante, +1 - cela devrait être possible par une analyse plus approfondie des /proc/*/mapfichiers, 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.
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.
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.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:
la source
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.
la source