GNU/Linux >> Znalost Linux >  >> Linux

Linux – Získávání informací o využití paměti procesu z /proc/pid/smaps?

Pro daný proces v /proc/<pid>/smaps , co jsou pro daný záznam mapování:

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

Je Shared_Clean + Shared_Dirty množství paměti sdílené s jinými procesy? Takže je to jako sdílené RSS?

Podobně je na tom Private_Clean + Private_Dirty množství paměti, které je dostupné pouze pro jeden proces ? Takže je to jako soukromé RSS?

Je hodnota PSS =PrivateRSS + (SharedRSS / počet procesů, které ji sdílejí)?

Několik dalších otázek po přečtení tohoto odkazu:LWN

Nyní si promluvme o procesu jako celku, na jehož záznam smapy se díváme.

Všiml jsem si, že když udělám Shared_Clean + Shared_Dirty + Private_Clean + Private_Dirty pro každý záznam smaps pro proces dostanu RSS procesu, jak
uvádí ps , což je docela fajn. Například

ps -p $$ -o pid,rss

Dá mi (přibližně) stejnou hodnotu pro rss jako součet všech Shared_Clean , Shared_Dirty , Private_Clean , Private_Dirty záznam v /proc/$$/smaps.

Ale co PSS za celý proces? Jak tedy z výše uvedeného příkladu získám PSS za $$? Mohu jen přidat položku PSS pro každé mapování smap a dorazit na PSS za $$?

A co USS za celý proces? Znovu použiji výše uvedený příklad a hádám, že mohu dorazit na USS za $$ sečtením pouze položek Private_* pro každou položku smaps za $$..ne?

Poznámky:
PSS=Proporcionální velikost sady.
USS=Jedinečná velikost sady.

Přijatá odpověď:

Čisté stránky jsou stránky, které nebyly od namapování upraveny (obvykle se textové části ze sdílených knihoven pouze čtou z disku (je-li to nutné), nikdy se neupravují, takže budou na sdílených čistých stránkách).
Špinavé stránky jsou stránky, které nejsou čisté (tj. byly upraveny).

Soukromé stránky jsou dostupné pouze tomuto procesu, sdílené stránky jsou mapovány jinými procesy.

RSS je celkový počet stránek, sdílených nebo nesdílených, aktuálně mapovaných do procesu. Takže Shared_Clean + Shared_Dirty by byla sdílená část RSS (tj. část RSS, která je také mapována do jiných procesů) a Private_Clean + Private_Dirty privátní část RSS (tj. mapovaná pouze v tomto procesu).

PSS (proporcionální velikost podílu) je taková, jak popisujete. Soukromé stránky se sečtou tak, jak jsou, a velikost každého sdíleného mapování se vydělí počtem procesů, které je sdílejí.
Pokud tedy proces měl 100 000 soukromých stránek, 500 000 stránek sdílených s jedním dalším procesem a 500 000 sdílených se čtyřmi jiné procesy, PSS bude:

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

Další čtení:

  • ELC:Kolik paměti aplikace skutečně využívají?
  • Documentation/filesystems/proc.txt ve zdrojovém kódu jádra
  • man proc(5)
  • Přehled správy paměti Linux
  • Správa paměti na TLDP.org
  • LinuxMM
Související:Linux – příznak noauto mount pro?

Pokud jde o částky za celý proces:

  • RSS lze (přibližně) získat sečtením Rss: záznamy v smaps (nemusíte sčítat sdílené/soukromé sdílené/nečisté položky).

    awk '/Rss:/{ sum += $2 } END { print sum }' /proc/$$/smaps
    
  • Můžete shrnout Pss: hodnoty stejným způsobem, abyste získali process-global PSS .
  • USS není hlášeno v smaps , ale ve skutečnosti se jedná o součet soukromých mapování, takže jej můžete získat stejným způsobem

Upozorňujeme, že stránka „možná ke sdílení“ se počítá jako soukromé mapování, dokud není skutečně sdílené. tj. pokud existuje pouze jeden proces, který aktuálně používá libfoo , textová část této knihovny se zobrazí v části soukromé procesu mapování. Bude zahrnuto ve sdílených mapováních (a odstraněno ze soukromých) pouze tehdy, když jiný proces začne tuto knihovnu používat.
Hodnoty se pro všechny procesy nesčítají přesně. Nevím přesně proč… omlouvám se.


Linux
  1. Linux – Omezit využití paměti pro jeden linuxový proces?

  2. Linux – Jak číst z /proc/$pid/mem pod Linuxem?

  3. Jak zjistit, ze které složky běží proces?

  1. Špičkové využití paměti linuxovým/unixovým procesem

  2. /proc/[pid]/pagemaps a /proc/[pid]/maps | linux

  3. Název procesu z jeho pid v linuxu

  1. Jak mohu číst z /proc/$pid/mem pod Linuxem?

  2. Omezte využití paměti pro jeden proces Linuxu

  3. Jak se v Linuxu hlásí využití paměti?