Как можно измерить общую память RSS, занятую набором (разветвленных) процессов, без двойного подсчета общих страниц и страниц с копированием при записи?
В итоге я написал для этого свою утилиту: https://gist.github.com/Eugeny/04ccfe8accf4bc74b0ca
Я столкнулся с этим init
(pid 1) для тестирования, а общее количество примерно равно физическому использованию оперативной памяти (согласно htop), поэтому я думаю, что это несколько правильно.
Пример использования:
~ » 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
Ни в одном из известных мне инструментов нет четко определенного способа определить, какие процессы и какие карты совместно используют, без повторения всех сопоставлений и сравнения адресов.
Однако Linux предлагает разумную оценку, известную как Пропорциональный размер набора. Об этом сообщается в / proc / [pid]> / maps.
Это значение представляет собой размер сопоставления, деленный на количество одноуровневых / родительских процессов с одним и тем же открытым отображением.
Таким образом, с программой, в которой открыто отображение 1 МБ плюс 1 МБ, общий для 4 других процессов, пропорциональный размер набора составляет 1 МБ + (1 МБ / 4) или 1,250 МБ. RSS в этом случае будет 2MiB.
Существует патч для htop, который будет использовать PSS для расчета «хорошей оценки» фактического объема используемой памяти.