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