Отримання інформації про використання пам'яті процесу з / 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для кожного запису карти в процесі, я отримую RSS цього процесу, як повідомляється ps, що досить круто. Наприклад, наприклад

ps -p $$ -o pid,rss

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

А як щодо PSS за весь процес? Отже, із наведеного вище прикладу, як отримати PSS за $$? Чи можу я просто додати запис PSS для кожного картографічного відображення та прибути до PSS за $$?

А як щодо USS за весь процес? Знову беручи приклад вище, я здогадуюсь, що я можу приїхати до USS за $$, підсумовуючи лише записи Private_ * для кожної записи в карти для $$ .. правда?

Примітки:
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, і це надихнуло мене задати ще кілька питань, тому я додав їх до свого питання вище.
Анкур Агарвал

Чудово! це дуже дуже корисно !!
camino

Я все ще плутаюся щодо shared_dirty - чи брудна природа цього заважає все ще ділитися?
Кевін

@Kevin: якби їх не поділили, їх би не обліковували Shared_Dirty- ви могли б уточнити своє запитання?
Мат

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