GNU/Linux >> Znalost Linux >  >> Linux

Jak zjistit, zda je dostatek volné paměti pro nasazení nové aplikace na počítači se systémem Linux?

(Na OP je asi trochu pozdě, ale tohle se ptá docela často, tak to zkusím)

free normálně zobrazuje něco takového:

             total       used       free     shared    buffers     cached
Mem:       8195284    8137708      57576          0    1232328    2651156
-/+ buffers/cache:    4254224    3941060
Swap:     18892216     759852   18132364

Lidé mají tendenci dívat se na Mem: při pokusu zjistit, kolik volné paměti mají. Bohužel tento řádek je docela zavádějící, protože linuxové jádro se snaží optimálně využít dostupnou paměť (alespoň) těmito způsoby:

  • Uloží do mezipaměti data z I/O subsystému (např. disku), takže budou v případě potřeby snadno dostupná.

  • Aktivně vyžene procesy, které byly nějakou dobu neaktivní, do swapovacího prostoru ve prospěch cachování dat pro aktivní procesy. To má tendenci upřednostňovat propustnost před odezvou, takže někteří lidé vyladí své jádro, aby toto chování změnili.

První bod je zdrojem zmatku ohledně free , protože Mem: řádek obsahuje paměť použitou pro ukládání do mezipaměti v množství použité paměti. Jádro však bude z důvodu výkonu ukládat do mezipaměti co nejvíce. Ve skutečnosti na jakémkoli systému Linux, který je nějakou dobu v provozu, se volná paměť blíží nule – nevyužitá paměť je plýtvání pamětí.

Vyrovnávací paměť však může jádro uvolnit, pokud to potřebuje jiný proces. I když to do určité míry ovlivní výkon I/O, jiné procesy mohou mít více paměti bez využití odkládacího prostoru . Proto je pro většinu záměrů a účelů tato paměť volná .

Proto free obsahuje druhý řádek, kde je vyrovnávací paměť považována za volnou:

-/+ buffers/cache:    4254224    3941060

Tento druhý řádek je to, na co by se lidé měli dívat, když chtějí vědět, zda mají dostatek volné paměti pro určitý účel.

Ve výše uvedeném příkladu podle Mem: na řádku je ~57 MB volné paměti. Pokud si však přečtete druhý řádek, ve skutečnosti je tam asi 3,9 GB které lze použít bez nucení aktivních procesů k výměně. Jako vedlejší poznámku je zde také asi 760 MB zřídka používaných dat, která byla vyměněna, aby bylo v hlavní paměti více místa pro procesy a ukládání do mezipaměti.

Zhruba ve stejnou dobu obsah /proc/meminfo :

MemTotal:        8195284 kB
MemFree:           57660 kB
Buffers:         1232352 kB
Cached:          2651156 kB
SwapCached:       119936 kB
.
.
.

MemTotal :dostupná fyzická paměť detekovaná jádrem.

MemFree :nevyužitá fyzická paměť – volná paměť zobrazená v Mem: řádek free .

Buffers :relativně dočasné úložiště nezpracovaných diskových bloků.

Cached :mezipaměť v paměti pro soubory načtené z disku. Nezahrnuje paměť SwapCached.

SwapCached :paměť, která byla jednou vyměněna a poté vyměněna zpět, ale stále je ve swapovacím prostoru. V případě potřeby lze její obsah jednoduše vyhodit (velmi rychle!), aniž byste jej museli vyměňovat (pomalejší).

Tedy mít polopřesný odhad paměti, která je skutečně k dispozici

MemFree + Buffers + Cached + SwapCached

je dobrým výchozím bodem – a ten free se zobrazí v tomto druhém řádku.

Správa paměti a související statistiky a měření jsou přirozeně složitější. Čísla zobrazená jako free jsou přinejlepším pouhými odhady, protože existuje mnoho dalších proměnných, které je třeba vzít v úvahu, pokud chcete jít hlouběji. Pro lidi, kteří pravidelně provádějí optimalizaci využití paměti, je to téměř forma umění.

EDIT:

Poněkud vtipný odkaz k tomuto "problému":

http://www.linuxatemyram.com/

EDITACE 2:

Chcete-li potvrdit poznámku o využití paměti, která je téměř formou umění:

Dokonce free chybí velká část dat uložených v mezipaměti na moderních systémech Linux. Od /proc/meminfo v mém systému:

SReclaimable:    2253576 kB

To jsou asi 2 GB paměti, kterou používá systémový slab alokátor pro ukládání položek adresáře do mezipaměti a podobně a je regenerovatelná (tj. v případě potřeby ji lze vyčistit a použít procesy). Přesto free nepovažuje ji za vyrovnávací paměť a nezadává ji do žádného ze svých výpočtů, a proto se zobrazuje jako použitá paměť.

slabtop utilita, pokud je k dispozici, umožňuje správci systému zjistit, k čemu se slab cache používá.

Způsob (pouze pro uživatele root), jak mít free zobrazit skutečné využití paměti systému je následující:

# swapoff -a
# sync
# echo 3 > /proc/sys/vm/drop_caches 
# free
             total       used       free     shared    buffers     cached
Mem:       8195284    3181468    5013816          0       8656     228832
-/+ buffers/cache:    2943980    5251304
Swap:            0          0          0
# swapon -a

První příkaz zakáže odkládací prostor. Nemělo by být vydáváno, pokud dostupná paměť nemusí být dostatečná pro uložení dat, která byla vyměněna - v takovém případě je třeba vzít v úvahu Swap: řádku volného ve výpočtech využití paměti.

Druhý příkaz přesune všechna data ve vyrovnávací paměti na disk. Umožňuje v dalším kroku uvolnit více vyrovnávací paměti.

Třetí příkaz je nejdůležitější ze sady – nutí jádro, aby zahodilo co nejvíce dat uložených v mezipaměti (mezipaměť stránek, položky adresáře, inody atd.).

Potom free konečně ukazuje, co běžící procesy skutečně používají ve svém -/+ buffers/cache: čára. Je docela patrné, že i po odstranění všech dat z mezipaměti jádro rychle začne znovu ukládat do mezipaměti - v tomto případě již během několika sekund dosáhlo téměř 250 MB dat v mezipaměti.

Poslední příkaz opět povolí odkládací prostor - je to nutné pouze v případě, že byl použit i první příkaz.

Je třeba poznamenat, že tyto příkazy by měl provádět uživatel root, aby měl potřebná oprávnění.


Linux
  1. Jak nainstalovat aplikaci Spotify na Linux

  2. Jak vypnout nebo restartovat Linux

  3. Jak přidat paměť, vCPU, pevný disk do virtuálního počítače Linux KVM

  1. Jak zaznamenat spotřebu paměti v Linuxu?

  2. Jak zjistím, zda vzdálený počítač používá Windows nebo Linux?

  3. Jak omezit využití paměti aplikace?

  1. Jak odstranit vyrovnávací paměti a mezipaměť v Linuxu

  2. Jak vymazat mezipaměť v Linuxu

  3. Jak vypočítat využití paměti v Linuxu pomocí sar, ps a zdarma