Uzyskiwanie informacji o zużyciu pamięci przez proces z / proc / pid / smaps

46

Dla danego procesu w /proc/<pid>/smaps, dla danego wpisu mapowania są:

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

Czy Shared_Clean+ Shared_Dirtyilość pamięci współdzielona z innymi procesami? Więc to jest jak współdzielony RSS?

Podobnie jest Private_Clean+ Private_Dirtyilość pamięci, która jest dostępna tylko dla jednego procesu ? Więc to jest jak prywatny RSS?

Czy wartość PSS = PrivateRSS + (SharedRSS / liczba procesów, które ją dzielą)?

Więcej pytań po przeczytaniu tego linku: LWN

Porozmawiajmy teraz o całym procesie, którego wpisu patrzymy na niego.

Zauważyłem, że jeśli zrobię Shared_Clean+ Shared_Dirty+ Private_Clean+ Private_Dirtydla każdego wpisu smaps dla procesu, dostanę RSS procesu zgodnie z raportem ps, co jest całkiem fajne. Na przykład

ps -p $$ -o pid,rss

Da mi (w przybliżeniu) taką samą wartość dla rss jako suma każdy Shared_Clean, Shared_Dirty, Private_Clean, Private_Dirtywpis w / proc / $$ / smaps.

Ale co z PSS dla całego procesu? Więc z powyższego przykładu, jak uzyskać PSS za $$? Czy mogę po prostu dodać wpis PSS dla każdego mapowania map i dotrzeć do PSS za $$?

A co z USS dla całego procesu? Ponownie biorąc powyższy przykład, zgaduję, że mogę dotrzeć do USS dla $$, sumując tylko wpisy Private_ * dla każdego wpisu smaps dla $$ .. prawda?

Uwagi:
PSS = Proporcjonalny rozmiar zestawu.
USS = Unikalny rozmiar zestawu.

Ankur Agarwal
źródło

Odpowiedzi:

50

Czyste strony to strony, które nie zostały zmodyfikowane od czasu ich zmapowania (zazwyczaj sekcje tekstowe z bibliotek współużytkowanych są odczytywane tylko z dysku (w razie potrzeby), nigdy nie modyfikowane, więc będą znajdować się na wspólnych, czystych stronach).
Brudne strony to strony, które nie są czyste (tj. Zostały zmodyfikowane).

Strony prywatne są dostępne tylko dla tego procesu, strony udostępnione są mapowane przez inne procesy * .

RSS to całkowita liczba stron, udostępnionych lub nie, obecnie zmapowanych w procesie. Tak więc Shared_Clean+ Shared_Dirtybędzie współdzieloną częścią RSS (tj. Częścią RSS, która jest również odwzorowana na inne procesy), a Private_Clean+ Private_Dirtyprywatną częścią RSS (tj. Tylko zmapowaną w tym procesie).

PSS (proporcjonalny rozmiar akcji) jest taki, jak opisano. Strony prywatne są sumowane bez zmian, a rozmiar każdego wspólnego mapowania jest dzielony przez liczbę procesów, które go współużytkują.
Więc jeśli proces miałby 100 000 stron prywatnych, 500 000 stron współużytkowanych z innym procesem i 500 000 stron z czterema innymi procesami, PSS wyglądałby następująco:

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

Dalsze odczyty:

W odniesieniu do sum obejmujących cały proces:

  • RSSmożna (w przybliżeniu + ) uzyskać poprzez zsumowanie Rss:wpisów w smaps(nie trzeba dodawać współdzielonych / prywatnych współdzielonych / brudnych wpisów).

    awk '/Rss:/{ sum += $2 } END { print sum }' /proc/$$/smaps
    
  • Możesz podsumować Pss:wartości w ten sam sposób, aby uzyskać globalny proces PSS.
  • USSnie jest zgłaszane smaps, ale w rzeczywistości jest to suma prywatnych mapowań, więc możesz je uzyskać w ten sam sposób

* Należy pamiętać, że strona „akcja-stanie” jest liczony jako prywatny mapowania dopóki nie zostanie faktycznie wspólne. tzn. jeśli aktualnie używany jest tylko jeden proces libfoo, sekcja tekstowa tej biblioteki pojawi się w prywatnych mapowaniach procesu . Zostanie uwzględniony we wspólnych mapowaniach (i usunięty z prywatnych) tylko wtedy, gdy / kiedy inny proces zacznie korzystać z tej biblioteki.
+ Wartości nie sumują się dokładnie dla wszystkich procesów. Nie jestem pewien, dlaczego ... przepraszam.

Mata
źródło
Dzięki za świetną odpowiedź. Doceniam to. Przeczytałem artykuł LWM i to zainspirowało mnie do zadawania kilku dodatkowych pytań, więc dodałem je do mojego pytania powyżej.
Ankur Agarwal
Wspaniały! to jest bardzo, bardzo pomocne !!
camino
Nadal jestem zdezorientowany co do shared_dirty - czy ten brudny charakter uniemożliwia udostępnianie?
Kevin
@Kevin: jeśli nie zostaną udostępnione, nie zostaną uwzględnione Shared_Dirty- czy możesz wyjaśnić swoje pytanie?
Mat.
brudne środki zmodyfikowane z oryginału. proces, prawda? co nie jest tak, jak się dzieli od bycia lokalnym?
Kevin,