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?


1
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.
peterh

Réponses:


4

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

2

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.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.