Ja mam počítač s 32 GB RAM, běží nějakých pouhých 21 dní od restartu, ted zrovna v podstatě nic moc nedělám (až na pár desítek otevřených oken v prohlížeči) a mám volných 6.5GB tedy 80% paměti je nějak zaplněno. Po restartu byla volná prakticky celá paměť (a po dalším bude zas).
Když si vyjedu, co používají programy, tak mi vyjde asi 5GB, tedy pouhých 15.6%. A systém si na začátku taky kousek uloupnul (takže je vidět jen 31GB jako celek).
Mám linux, viry nemám, ani adware ani jiné problémy (leakující programy a tak).
Mám tedy problém, nebo ne?
Samozřejmě že ne. Kdykoli načítám, nebo ukládám nějaký soubor (každé spuštění programu znamená načtení jeho souboru, ať už je to prohlížeč, textový editor, hra, nebo něco, co jsem si sám napsal), tak systém ten soubor podrží v paměti, protože je docela rozumná šance, že se k němu za chvíli vrátím. Stejně tak prohlížeč si pamatuje obrázky (a často i stránky), které stáhnul a nebude mi při každé návštěve nějaké stránky stahovat všechna loga, když se při minulém stahování z jejich hlavičky dočetl, že se nebudou tento měsíc měnit. Nebo když se na ně zeptá a server mu odpoví, že se od minula nezměnily.
A když požaduju stejný soubor znovu (dopsal jsem text, zavřel editor, pak chci psát další, tak otevřu editor ...), tak se nejdřív podívá, jestli ho náhodou nemá v paměti a pokud ano, tak ho použije (disketa je pomala, HDD je rychlejsi, SSD ještě rychlejší, ale proti paměti to jsou loudové všichni).
Takže se paměť pomalu plní soubory, na které jsem sáhnul, až je skoro plná (u mě tam teď leží něco jako 31 - 6.5 - 5 = 19.5GB). A já zase chci nějaký soubor a on není v paměti, co s tím? Počítač se podívá, který soubor v paměti jsem nejdéle nepoužil, ten zahodí a načte ten nový. Pravda je, že někdy to zahození není tak jednoduché, protože jsem v něm dělal nějaké změny a ještě se nestihnul uložit v nové verzi, tak se musí počkat, až se uloží a pak se teprve dá zahodit, ale pořád je to lepší, než kdyby ta paměť ležela ladem a muselo se tahat vždycky všechno. (Když už jsem si tu paměť zaplatil, tak ať je taky k něčemu dobrá, že ...) Když spustíš další program, tak se prostě nějaký neptřebný kus té historie uvolní a vrazí se tam ten nový program a spustí se. A zase je paměť "skoro plná jen tak".
Typicky je to vidět, když kopíruju z rychllého disku na pomalý (z SSD na disketu/flasku) hromadu souborů výrazně větší, než je paměť - prvních pár souborů je hotových ihned (protože se rychle načtou do paměti, označí jako určené k uložení a hned se čtou další, zatímco se předchozí na pozadí pomalu přesouvají na pomalé medium, ale když se paměť zaplní, tak rychlost kopírování rázem spadne, protože už ji neurčuje to, jak rychle dokážeš číst zdrojové soubory, ale jak rychle je dokážeš zapisovat na cíl (s večkerou režií okolo, jakože se použité sektory musí označit jako použité, aby se na ně nepsalo znovu a jméno souboru se musí zapsat do správného adresáře, že už tam teda je a pokud je na cíli žurnál, tak se musí updatovat, že soubor byl FAKT uložený ... zase žurnál dokáže dost pomoct, když třeba spadnou pojistky a je potřeba dát dohromady, co na tom disku je a co není)
Dalším efektem je, že když kopírování skončí, tak nemužeš tu flasku jen tak vyrvat z díry, protože se na ní možná ještě furt píše, zatímco se počítač zabývá tím, jak ti nahrát novou hru, nebo prolézt jiné adresáře, nebo co to vlastně děláš. A ani to, že u diskety přestane blikat kontrolka ještě neznamená, že je hotovo, protože počítač zatím jen zvládnul odlít dost souborů na to, aby se mohl věnovat tvým nejnovějším požadavkům a zápis zbytku klidněš ještě může počkat. Občas i řadu minut. Proto je u vyndavacích medií ten příkaz "bezpečně odpojit", nebo jak se to zrovna tvému systému líbí (já třeba používám něco jako "umount /dev/sdc7", nebo "umount /home" a někdo jiný kliká na ikonku vyšoupátka) a ten si ohlídá, že se skutečně na to medium opravdu uloží všechno co tam patří, pak ho odpojí a oznámí ti to, že ho mužeš bezpečně vyndat.
Navíc při táhle akrobacii s pamětí si systém většinou nechává nějaký (malý) kus volný, aby ho měl při ruce, poḱud se tvůj program rozhodne, že ho právě nutně potřebuje (třeba pro vykreslení další jednotky, nebo zapamatování, co zrovna klofeš na klávesnici, nebo pro jiný z bambilionu možných důvodů). (U mě je to zrovna těch 6.5GB volných.)
Pokud to s otvíráním programů a editací souborů přeženeš, tak OS zjistí, že už není v cache nic, co by se dalo uvolnit a tak prostě vezme kus nějakého programu, nebo souboru, co zrovna používáš (zase ideálně ten nejstarší), zapíše ho na disk do swapu (což teda jako trvá dlouho, ale co má chudák dělat, aby ti vyhověl), vyhodí ho z paměti a vrazí tam tentvůj nejnovější požadavek. Když se pak ukáže, že ten odložený kus paměti je potřeba (přepneš třeba na jeho tab a začneš klikat), tak se z toho disku zase nahraje zpátky do paměti (což zase trvá) a tváří se, že tam celou dobu byl. (A pokud jsi mezitím nic nezavřel, tak se pro něj nejdřív musí uvolnit místo, tak se do swapu hodí něco jiného. Přejeme přijemné swapování.)
No a když už není ani cache, ani volná paměť, ani místo ve swapu a ty (nebo tvoje programy) se furt něčeho dožaduješ, tak holt systém řekne "Sorry, co je moc, to je moc, něco musí z kola ven" a nějak se zařídí. Třeba vyhodí chybové okno že není dost paměti na vyhození chybového okna, že není dost paměti, něco někde zahodí a následkem toho něco nějak zbuchne.
---
No, ve skutečnosti je to ještě mnohem složitější, ale pro představu by to mohlo stačit.
A proto, když vidím, že prakticky není volná paměť, ale programů běží málo a všechno je v buffer/cache a swap se nepoužívá, nebo jen trochu, tak jsem naprosto v klidu. (Ono v tom swapu můžpu být nějaká pomocná data něčeho třeba okolo screen saveru, grafiky, knihovny pro zobrazování nějakých obskurních formátů, nebo cokoli jiného, co se používá jen zřídka a před týdnem to tam vytlačil nějaký fakt náročný proces a od té doby to nikdo nechtěl)
$ free -h
total used free shared buff/cache available
Mem: 31Gi 5.0Gi 6.5Gi 548Mi 19Gi 25Gi
Swap: 49Gi 0B 49Gi