GNU/Linux >> Znalost Linux >  >> Linux

Linux – potřebujete vysvětlení ohledně velikosti rezidentní sady/virtuální velikosti?

Našel jsem, že pidstat by byl dobrým nástrojem pro sledování procesů. Chci vypočítat průměrné využití paměti konkrétního procesu. Zde je několik příkladů výstupu:

02:34:36 PM       PID  minflt/s  majflt/s     VSZ    RSS   %MEM  Command
02:34:37 PM      7276      2.00      0.00  349212 210176   7.14  scalpel

(Toto je část výstupu z pidstat -r -p 7276 .)

Mám použít informace o velikosti rezidentní sady (RSS) nebo virtuální velikosti (VSZ) k výpočtu průměrné spotřeby paměti? Přečetl jsem si pár věcí na Wikipedii a na fórech, ale nejsem si jistý, zda plně rozumím rozdílům. Navíc se zdá, že žádný z nich není spolehlivý. Jak tedy mohu monitorovat proces, abych zjistil využití paměti?

Jakákoli pomoc v této záležitosti by byla užitečná.

Přijatá odpověď:

RSS udává, kolik paměti má tento proces aktuálně v hlavní paměti (RAM). VSZ udává, kolik virtuální paměti má proces celkem. To zahrnuje všechny typy pamětí, a to jak v RAM, tak swapované. Tato čísla mohou být zkreslená, protože zahrnují také sdílené knihovny a další typy paměti. Můžete mít pět set instancí bash běží a celková velikost jejich paměťové stopy nebude součtem jejich hodnot RSS nebo VSZ.

Pokud potřebujete získat podrobnější představu o paměťové stopě procesu, máte několik možností. Můžete projít /proc/$PID/map a vyřadit věci, které se vám nelíbí. Pokud se jedná o sdílené knihovny, výpočet by mohl být složitý v závislosti na vašich potřebách (což si myslím, že si pamatuji).

Pokud vám záleží pouze na velikosti haldy procesu, můžete vždy analyzovat [heap] záznam v map soubor. Velikost, kterou jádro alokovalo pro hromadu procesu, může, ale nemusí odrážet přesný počet bajtů, o které proces požádal k přidělení. Existují drobné detaily, vnitřnosti jádra a optimalizace, které to mohou shodit. V ideálním světě to bude tolik, kolik váš proces potřebuje, zaokrouhleno nahoru na nejbližší násobek velikosti systémové stránky (getconf PAGESIZE vám řekne, co to je – na počítačích je to pravděpodobně 4 096 bajtů).

Pokud chcete vidět, kolik paměti proces přidělil , jedním z nejlepších způsobů je vzdát se metrik na straně jádra. Místo toho instrumentujete (de)alokační funkce paměti haldy C knihovny pomocí LD_PRELOAD mechanismus. Osobně valgrind mírně zneužívám získat informace o takových věcech. (Všimněte si, že použití instrumentace bude vyžadovat restartování procesu.)

Související:Linux – omylem jsem smazal složku /root a nyní je řetězec shellu jiný. Co dává?

Vezměte prosím na vědomí, protože můžete také srovnávat běhové prostředí, že valgrind vaše programy budou velmi mírně pomalejší (ale pravděpodobně v rámci vašich tolerancí).


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

  2. Využití paměti aktuálního procesu v C

  3. Jak zkontrolovat velikost haldy pro proces v Linuxu

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

  2. Když se proces rozvětví, zkopíruje se jeho virtuální nebo rezidentní paměť?

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

  1. Jak zkontrolovat velikost RAM v příkazovém řádku Linuxu v GB

  2. Linuxové příkazy:prozkoumávání virtuální paměti pomocí vmstat

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