Получение информации об использовании памяти процессом из / proc / pid / smaps


46

Для данного процесса /proc/<pid>/smaps, для данной записи сопоставления:

  1. Shared_Clean
  2. Shared_Dirty
  3. Private_Clean
  4. Private_Dirty

Является ли Shared_Clean+ Shared_Dirtyобъем памяти, который используется другими процессами? Так это как общий RSS?

Точно так же Private_Clean+ Private_Dirtyобъем памяти, который доступен только для одного процесса ? Так это как приватный RSS?

Значение PSS = PrivateRSS + (SharedRSS / количество процессов, совместно использующих его)?

Еще несколько вопросов после прочтения этой ссылки: LWN

Теперь давайте поговорим о процессе в целом, чью запись в smaps мы рассматриваем.

Я заметил , что если я делаю Shared_Clean+ Shared_Dirty+ Private_Clean+ Private_Dirtyдля каждого smaps записи процесса я получаю RSS процесса, сообщаемые ps, который является довольно прохладно. Например,

ps -p $$ -o pid,rss

Даст мне (приблизительно) одинаковое значение RSS как сумма каждый Shared_Clean, Shared_Dirty, Private_Clean, Private_Dirtyзапись в / Proc / $$ / smaps.

Но как насчет PSS для всего процесса? Итак, из приведенного выше примера, как я могу получить PSS за $$? Могу ли я просто добавить запись PSS для каждого сопоставления smaps и получить PSS за $$?

А как насчет USS для всего процесса? Снова взяв приведенный выше пример, я предполагаю, что могу прибыть в USS за $$, суммируя только записи Private_ * для каждой записи smaps за $$ .. верно?

Примечания:
PSS = пропорциональный размер набора.
USS = Уникальный размер набора.

Ответы:


50

Чистые страницы - это страницы, которые не были изменены с момента их отображения (как правило, текстовые разделы из общих библиотек читаются только с диска (при необходимости), никогда не изменяются, поэтому они будут в общих чистых страницах).
Грязные страницы - это страницы, которые не являются чистыми (т.е. были изменены).

Личные страницы доступны только этому процессу, общие страницы отображаются другими процессами * .

RSS - это общее количество страниц, опубликованных или нет, в настоящее время отображенных в процессе. Таким образом, Shared_Clean+ Shared_Dirtyбудет общей частью RSS (то есть частью RSS, которая также отображается в другие процессы) и Private_Clean+ Private_Dirtyчастной частью RSS (то есть только в этом процессе).

PSS (пропорциональный размер доли), как вы описали. Личные страницы суммируются как есть, и размер каждого общего сопоставления делится на число процессов, которые разделяют его.
Таким образом, если бы у процесса было 100 тыс. Личных страниц, 500 тыс. Страниц, совместно используемых одним другим процессом, а 500 тыс. Страниц совместно с четырьмя другими процессами, PSS будет:

100k + (500k / 2) + (500k / 5) = 450k

Дальнейшие чтения:

Относительно общепроизводственных сумм:

  • RSSможет быть (приблизительно + ) получено суммированием Rss:записей в smaps(вам не нужно добавлять общие / частные общие / грязные записи).

    awk '/Rss:/{ sum += $2 } END { print sum }' /proc/$$/smaps
    
  • Вы можете суммировать Pss:значения одинаково, чтобы получить глобальный процесс PSS.
  • USSне сообщается smaps, но на самом деле это сумма частных сопоставлений, поэтому вы можете получить ее также

* Обратите внимание , что страница «доля- в состоянии» считается как частное отображение до тех пор, пока не будет на самом деле разделяет. т. е. если в настоящее время используется только один процесс libfoo, текстовая часть этой библиотеки появится в личных сопоставлениях процесса . Он будет учтен в общих сопоставлениях (и удален из частных), только если / когда другой процесс начнет использовать эту библиотеку.
+ Значения не складываются точно для всех процессов. Не совсем уверен, почему ... извините.


Спасибо за отличный ответ. Ценить это. Я прочитал статью LWM, и это вдохновило меня задать еще несколько вопросов, поэтому я добавил их к своему вопросу выше.
— Анкур Агарвал

Большой! это очень очень полезно!
— Камино

Я до сих пор не совсем понимаю, что такое shared_dirty. Неужели грязная природа этого все еще не позволяет ему делиться?
— Кевин

@ Кевин: если бы их не поделили, их бы не учли Shared_Dirty- не могли бы вы уточнить свой вопрос?
— Мат

грязные средства, модифицированные из оригинала. процесс, верно? что не так, как это происходит от того, чтобы быть общим для того, чтобы быть местным?
— Кевин
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.