Portál AbcLinuxu, 10. května 2025 07:07
$ free -m total used free shared buffers cached Mem: 3756 3693 62 0 38 958 -/+ buffers/cache: 2696 1059 Swap: 4290 71 4219 $ vmstat -S M 1 procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu---- r b swpd free buff cache si so bi bo in cs us sy id wa 1 0 71 105 34 918 21 24 267 75 92 121 11 6 77 6Je mi jasné že je mnohem užitečnější odswapovat paměť na kterou se dlouho nešáhlo a uvolněné místo použít na diskovou cache, navíc toto chování dá poměrně dobře omezit nastavením /proc/sys/vm/swappiness na nulu... Jde ale nějak zjistit jak je vůbec tato cache používána? Protože po vynuceném vyprázdnění (diskové?) cache
sync ; echo 3 > /proc/sys/vm/drop_cachesZůstane v cachi ještě poměrně dost dat (958M před, 355M po). Ve výpisu vmstat -S M -s vidím 354 M swap cache. Co jsem tak pochopil z linux-vmm, tak swap cache je tabulka stránek které byly nahrány ze swapu do ram a ještě nebyly modifikovány, takže je lze uvolnit bez IO. A na tohle je potřeba 354M? Navíc tato položka nezmizí když dám swapoff -a...?! Na jedné stránce jsem četl názor že jde jen o špatně pojmenovanou položku ve vmstat... Otázka tedy zní. Jak zjistit podrobnosti o tom co se nachází v cache? Jak nastavit tlak na používání jednotlivých částí a jak jí celou vyprázdnit?
Položka swap cache z vmstat je stejný údaj jako cache z free. A podle mě obsahuje nejen zápisovou diskovou cache, ale i čtecí, a drop_caches pouze zapíše špinavé stránky, takže číslo, co ti zbylo, jsou nacachované stránky, do kterých se dosud nic nezapsalo a pokud se nebudou používat, jádro je zahodí na úkor stránek více používaných.
Linux ale nerozlišuje mezi stránkami diskové cache a ostatními, co se týče jejich zahazování. Všechny druhy stránek mají společnou úroveň swappiness. Takže při nešťastném zatížení může disková cache vytlačovat třeba kód procesů. Pokud aplikace ví, že data přečtená/zapsaná znovu nebudou potřeba, je možné napovědět jádru pomocí DIRECT_IO na otevřeném deskriptoru.
Nevim na co ti ten nb presne slouzi, ale nehces ten swap uplne vypnout kdyz mas 4G? Ja mam 4G a swap nepouzivam.Programuju v Javě :) Bez swapu by brzy zasáhl OOM zabiják.
Taky se mi nelibilo, ze s tim porad pracoval i kdyz mel pamet volnou.Když si snížím swappines, tak se systém chová celkem rozumně. Čas od času ho ale při nedostatku paměti popadne takový "IO záchvat" že něco musím sestřelit abych mohl pokračovat v práci... Mě by akorát zajímalo co se v danou chvíli děje...? V iotop akorát vidím že kopa procesů čeká na io. To systém načítá soubory mapované do ram (kód aplikací), nebo se tak moc swapuje?
Jako alternativu pripadne nabizim takovou peknou feature od Googlu co pridali do jadra (presne nevim jak se to jmenuje), ale je to v podstate RAM disk s kompresi ktery se pouziva jako swap.Jo, o tom jsem četl v Jaderných novinách... S touto myšlenkou (komprimovat data před vyhozením z ram) již bylo vytvořeno víc patchů... Jeden projekt je například zde: http://code.google.com/p/compcache/ Díky za nápad... Určitě vyzkouším...
Programuju v Javě :) Bez swapu by brzy zasáhl OOM zabiják.Huh, tak to je dost slabá výmluva. Netvrdím, že nelze při práci přesáhnout 4G, ale zase vím, že to je na spoustu projektů až dost.
Když si snížím swappines, tak se systém chová celkem rozumně. Čas od času ho ale při nedostatku paměti popadne takový "IO záchvat" že něco musím sestřelit abych mohl pokračovat v práci... Mě by akorát zajímalo co se v danou chvíli děje...? V iotop akorát vidím že kopa procesů čeká na io. To systém načítá soubory mapované do ram (kód aplikací), nebo se tak moc swapuje?Oboje, proto je lepší se na swap vykašlat. Pokud není paměť a navíc nutíte systém něco dělat tak se to dostane do takového kolečka kde to furt přehazuje stránky mezi diskem a RAM, ať už se jedná o swap nebo o cache.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.