Stejně jako každý jiný operační systém má GNU/Linux efektivně implementovanou správu paměti, a to dokonce více než efektivně. Pokud vám však nějaký proces ubírá paměť a vy ho chcete vymazat, Linux nabízí způsob, jak propláchnout nebo úplně vymazat mezipaměť RAM.
Jak vymazat vyrovnávací paměť (cache) v Linuxu?
Každý systém Linuxu má tři možnosti, jak vymazat mezipaměť bez přerušení procesů nebo služeb.
Příkazy pouštějte přes SSH.
1. Vymaže pouze PageCache.
sync; echo 1 > /proc/sys/vm/drop_caches
2. Vymaže dentries i inodes (dentry a inody)
sync; echo 2 > /proc/sys/vm/drop_caches
3. Vymaže PageCache, dentries a inodes.
sync; echo 3 > /proc/sys/vm/drop_caches
Vysvětlení příkazu
Sync promázne vyrovnávací paměť souborového systému. Příkazy oddělené znakem „;“ se spouštějí postupně. Shell počká na ukončení každého příkazu, než provede další příkaz v sekvenci. Jak je uvedeno v dokumentaci jádra, zápis do drop_cache vyčistí mezipaměť, aniž by došlo k zabití nějaké aplikace/služby, a příkaz echo provádí zápis do souboru.
Pokud je třeba vyčistit diskovou mezipaměť je nejbezpečnější první příkaz, protože „…echo 1 > ….“ vyčistí pouze mezipaměť PageCache.
Třetí výše uvedenou možnost „…echo 3 >“ nedoporučujeme v produkčním prostředí používat, pokud nevíte co děláte, protože vymaže mezipaměť stránek, dentry a inody.
Uvolnění vyrovnávací paměti a mezipaměti v Linuxu
Vyrovnávací paměť můžete také uvolnit bez restartování systému a výpadku.
Linux je navržen tak, že se před pohledem na disk podívá do vyrovnávací paměti. Pokud najde prostředek v mezipaměti, pak se požadavek na disk nedostane. Pokud vyčistíte mezipaměť, tak bude operační systém pomalejší, protože bude hledat prostředek na disku.
Podrobněji jsme o tom psali v našem článku RAM na Linuxu.
Můžete si vytvořit shellový skript pro automatické čištění mezipaměti RAM denně ve 2 hodiny ráno prostřednictvím systémového cronu. Případně si ho nechat pouze na manuální spuštění a nemusíte si pamatovat celý řádek příkazu.
Vytvořte shellový skript ramclear.sh
touch ramclear.sh
A přidejte následující řádky.
#!/bin/bash echo "echo 1 > /proc/sys/vm/drop_caches"
Nastavte oprávnění ke spuštění souboru ramclear.sh.
chmod 755 ramclear.sh
Po spuštění skriptu se RAM promaže nebo ve vámi určený čas pomocí systémového cronu.
Jak vymazat SWAP v Linuxu?
Pokud chcete vyčistit prostor swapu, můžete použít příkaz:
swapoff -a && swapon -a
Výše uvedený příkaz můžete také přidat do skriptu ramclear.sh , poté co pochopíte všechna související rizika.
Nyní budeme oba výše uvedené příkazy kombinovat do jediného příkazu, abychom vytvořili správný skript pro vymazání mezipaměti RAM a odkládacího prostoru.
#!/bin/bash echo 3 > /proc/sys/vm/drop_caches && swapoff -a && swapon -a && printf '\n%s\n' 'Ram-cache a swap vymazány'
Po vyzkoušení obou výše uvedených příkazů spustíme příkaz „free -h“ před a po spuštění skriptu zkontrolujeme mezipaměť.