GNU/Linux >> Znalost Linux >  >> Linux

Správné určení využití paměti v Linuxu

Nestydatě zkopírujte/vložte moji odpověď ze serverfault právě druhý den :-)

Systém linuxové virtuální paměti není tak jednoduchý. Nemůžete jen sečíst všechna pole RSS a získat nahlášenou hodnotu used od free . Existuje pro to mnoho důvodů, ale uvedu pár těch největších.

  • Když se proces rozvětví, rodič i podřízený se zobrazí se stejným RSS. Linux však používá kopírování při zápisu, takže oba procesy skutečně využívají stejnou paměť. Teprve když jeden z procesů upraví paměť, bude skutečně duplikována.
    To způsobí free číslo menší než top Součet RSS.

  • Hodnota RSS nezahrnuje sdílenou paměť. Protože sdílená paměť není vlastněna žádným procesem, top nezahrnuje jej do RSS.
    To způsobí free číslo bude větší než top Součet RSS.


Pokud hledáte čísla paměti, která se sčítají, podívejte se na smem:

smem je nástroj, který může poskytovat četné zprávy o využití paměti v systémech Linux. Na rozdíl od stávajících nástrojů může smem hlásit proporcionální velikost sady (PSS), což je smysluplnější vyjádření množství paměti používané knihovnami a aplikacemi v systému virtuální paměti.

Protože velké části fyzické paměti jsou obvykle sdíleny mezi více aplikacemi, standardní míra využití paměti známá jako velikost rezidentní sady (RSS) výrazně nadhodnocuje využití paměti. PSS místo toho měří „spravedlivý podíl“ každé aplikace na každé sdílené oblasti, aby poskytl realistickou míru.

Například zde:

# smem -t
  PID User     Command                         Swap      USS      PSS      RSS
...
10593 root     /usr/lib/chromium-browser/c        0    22868    26439    49364 
11500 root     /usr/lib/chromium-browser/c        0    22612    26486    49732 
10474 browser  /usr/lib/chromium-browser/c        0    39232    43806    61560 
 7777 user     /usr/lib/thunderbird/thunde        0    89652    91118   102756 
-------------------------------------------------------------------------------
  118 4                                       40364   594228   653873  1153092 

Takže PSS je zde zajímavý sloupec, protože bere v úvahu sdílenou paměť.
Na rozdíl od RSS má smysl to sečíst. Zde získáme celkem 654 Mb pro uživatelské procesy.

Výstup pro celý systém vypovídá o zbytku:

# smem -tw
Area                           Used      Cache   Noncache 
firmware/hardware                 0          0          0 
kernel image                      0          0          0 
kernel dynamic memory        345784     297092      48692 
userspace memory             654056     181076     472980 
free memory                   15828      15828          0 
----------------------------------------------------------
                            1015668     493996     521672 

Takže 1 Gb RAM celkem =654 Mb procesů v uživatelské zemi + 346 Mb paměť jádra + 16 Mb zdarma
(dejte nebo vezměte pár Mb)

Celkově je asi polovina paměti využita pro cache (494 Mb).

Bonusová otázka :co je zde uživatelská mezipaměť vs mezipaměť jádra?

btw pro něco vizuálního zkuste:

# smem  --pie=name


Opravdu dobrý nástroj je pmap které vypisují aktuální využití paměti pro určitý proces:

pmap -d PID

Více informací o něm najdete na manuálové stránce man pmap a také se podívejte na 20 nástrojů pro monitorování systému Linux, které by měl znát každý správce systému, které obsahují seznam skvělých nástrojů, které vždy používám k získání informací o svém linuxovém boxu.


Linux
  1. Linux – skutečné využití paměti?

  2. Linux – správně určit využití paměti v Linuxu?

  3. Linux df příkaz

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

  2. Načíst využití CPU a paměti jedním procesem v Linuxu?

  3. Omezení využití procesní paměti/CPU v linuxu

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

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

  3. Ubuntu Linux:Proces swap paměti a využití paměti