GNU/Linux >> Znalost Linux >  >> Linux

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

Řešení 1:

Ve zkratce:

  • Virtuální velikost: je množství adresového prostoru, který proces spravuje. Virtuální adresní prostor obsahuje vše, k čemu má proces přístup prostřednictvím ukazatelů (odkazů na adresy paměti). Pokud například váš program získá přístup k framebufferu vaší grafické karty, tato paměť je namapována na virtuální prostor procesu a obdrží adresu, která je uložena do ukazatele. Do velikosti virtuálního adresního prostoru se započítávají také soubory mapované v paměti a anonymní mapování. Téměř vše je ve virtuální velikosti. Pokud sečtete velikost všech rozsahů adres uvedených v /proc/<pid>/maps , měl by vám vrátit zhruba stejnou hodnotu virtuální velikosti.

  • Rezidentní velikost: je množství paměti, která patří konkrétně tomuto procesu, který je aktuálně uložen v paměti. To znamená množství paměti, která není ve swapu. Všimněte si, že části procesu mohou být ve swapovací paměti, i když je proces spuštěn. Operační systém vytáhne tyto oblasti ze swapu, když se k nim proces pokusí získat přístup. To by mělo zahrnovat haldu, zásobníky všech vláken a další soukromá mapování. Pokud se podíváte do /proc/<pid>/maps , [stack] , [heap] a další anonymní mapování (ta, která nemají cesty k souborům) jsou buď zaměněna nebo započítána do rezidentní velikosti.

  • Sdílená velikost: je množství paměti, které může patřit více procesům. Pokud máte například v paměti načteny čtyři instance stejné aplikace, budete mít čtyři instance haldy a alespoň čtyři zásobníky, jednu pro každý proces (toto je rezidentní paměť), ale budete mít pouze jednu instanci binární kód programu a jeho knihoven. Toto je sdílený prostor. Zahrnuje nejen binární kód programu a jeho knihovny, ale také lokalizační soubory, data programu pouze pro čtení, segmenty sdílené paměti SysV a POSIX, semafory atd... Pokud se podíváte do /proc/<pid>/maps , většina mapování vázaných na soubory knihovny a programu je sdílena.

Všimněte si, že VIRT obsahuje spojení RSS a SHR a bude vždy větší než kterýkoli z nich. Mohou existovat oblasti účtované jako RSS i SHR.

Řešení 2:

Odpověď In Juliano:

Pamatujte, že RSS + SHR <=VIRT, vždy.

To je jen nepravda. SHR obsahuje veškerou virtuální paměť, kterou lze sdílet s jinými procesy, a RSS obsahuje veškerou paměť fyzicky v RAM, kterou proces používá.

Veškerá sdílená paměť, která je aktuálně v RAM, se tedy počítá jak v SHR, tak v RSS, takže SHR + RSS nemá žádný význam, protože může obsahovat duplicitní počty.

Chcete-li vytvořit proces s RSS + SHR> VIRT, stačí mmapovat velký soubor (1 GB) a poté si jej celý přečíst:soubor s mapováním bude načten do RAM a VIRT, SHR a RSS bude každý o něco větší než 1 GB, takže SHR + RSS> VIRT.


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

  2. Jak zkontrolovat využití paměti na serveru se systémem Linux

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

  1. Jak zjistit využití uživatelské paměti v linuxu

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

  3. Jak omezit využití paměti aplikací v linuxu?

  1. Jak zabít proces zombie na Linuxu

  2. Využití paměti Linuxu

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