Rozdíly
Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.
| Obě strany předchozí revize Předchozí verze Následující verze | Předchozí verze | ||
| it:server:pamet-ram-swap [2025/02/14 12:22] – [Instalace a konfigurace `swapspace`] Petr Nosek | it:server:pamet-ram-swap [2025/02/14 12:29] (aktuální) – [Použití `cgroups` k omezení swapování per proces] Petr Nosek | ||
|---|---|---|---|
| Řádek 223: | Řádek 223: | ||
| Pokud swapovací soubor nevznikl a RAM je téměř plná, znamená to, že `swapspace` **nefunguje správně** a je potřeba prověřit jeho konfiguraci. | Pokud swapovací soubor nevznikl a RAM je téměř plná, znamená to, že `swapspace` **nefunguje správně** a je potřeba prověřit jeho konfiguraci. | ||
| + | |||
| + | |||
| + | |||
| + | === Ověření chování swapu při uvolnění paměti === | ||
| + | |||
| + | Chci ověřit, zda `swapspace` uvolňuje swapovací prostor podle nastaveného parametru **upper_freelimit**. K tomu jsem použil následující postup: | ||
| + | |||
| + | 1️⃣ Nejprve jsem si zaznamenal aktuální hodnoty využití RAM a swapu: | ||
| + | |||
| + | <code bash> | ||
| + | free -h | ||
| + | </ | ||
| + | |||
| + | 2️⃣ Poté jsem uvolnil cache a paměť, buď zavřením několika aplikací, nebo pomocí příkazu: | ||
| + | |||
| + | <code bash> | ||
| + | sync && echo 3 | sudo tee / | ||
| + | </ | ||
| + | |||
| + | Tento příkaz: | ||
| + | - **`sync`** zajistí, že se všechna data z paměti zapíší na disk. | ||
| + | - **`echo 3 > / | ||
| + | |||
| + | 3️⃣ Po uvolnění paměti jsem znovu zkontroloval využití RAM a swapu: | ||
| + | |||
| + | <code bash> | ||
| + | free -h | ||
| + | </ | ||
| + | |||
| + | Pokud `swapspace` funguje správně, měl by swapovací soubor začít mizet, pokud dostupná RAM překročí hodnotu **upper_freelimit** nastavenou v `/ | ||
| + | |||
| + | Pokud se swap neodstranil, | ||
| ==== Použití `cgroups` k omezení swapování per proces ==== | ==== Použití `cgroups` k omezení swapování per proces ==== | ||
| - | Další možností, jak omezit swapování, | + | Další možností, jak omezit swapování, |
| - | Pro zapnutí omezení swapu v cgroups jsem nejprve povolil swapový limit v jádře: | + | === Povolení swapového limitu |
| + | |||
| + | Nejprve je třeba zajistit, že systém umožňuje řízení swapu pomocí `cgroups`. V Ubuntu 20.04+ a novějších je podpora obvykle aktivní, ale pro jistotu ji lze zapnout úpravou GRUBu: | ||
| <code bash> | <code bash> | ||
| - | sudo grubby --update-kernel=ALL --args=" | + | echo " |
| + | sudo update-grub | ||
| sudo reboot | sudo reboot | ||
| </ | </ | ||
| - | Pak jsem vytvořil cgroup pro omezení | + | Po restartu ověř, zda je swapový limit aktivní: |
| + | |||
| + | <code bash> | ||
| + | cat / | ||
| + | </ | ||
| + | |||
| + | Pokud se ve výstupu objeví `swapaccount=1`, | ||
| + | |||
| + | === Zakázání | ||
| + | |||
| + | Pokud chceš zcela zakázat | ||
| + | |||
| + | <code bash> | ||
| + | sudo systemctl set-property user-$(id -u).slice MemorySwapMax=0 | ||
| + | </ | ||
| + | |||
| + | Tento příkaz: | ||
| + | - Omezuje swapování pro všechny procesy aktuálního uživatele. | ||
| + | - Po restartu systému se nastavení zachová. | ||
| + | |||
| + | Pokud chceš nastavení aplikovat | ||
| + | |||
| + | <code bash> | ||
| + | sudo systemctl set-property firefox.service MemorySwapMax=0 | ||
| + | </ | ||
| + | |||
| + | === Omezení swapu pro konkrétní procesy === | ||
| + | |||
| + | Pokud chceš nastavit konkrétní limit pro swap u určité aplikace, můžeš použít `cgroups` ručně: | ||
| + | |||
| + | 1️⃣ | ||
| <code bash> | <code bash> | ||
| sudo mkdir -p / | sudo mkdir -p / | ||
| + | </ | ||
| + | |||
| + | 2️⃣ **Nastav maximální povolený swap na 500 MB**: | ||
| + | |||
| + | <code bash> | ||
| echo 500M | sudo tee / | echo 500M | sudo tee / | ||
| + | </ | ||
| + | |||
| + | 3️⃣ **Přidej běžící proces do této cgroup**: | ||
| + | |||
| + | <code bash> | ||
| echo $$ | sudo tee / | echo $$ | sudo tee / | ||
| </ | </ | ||
| - | Tím jsem zajistil, že procesy běžící v této skupině | + | Tímto způsobem se omezení aplikuje na procesy běžící v této skupině. |
| - | ---- | + | === Ověření správné funkčnosti === |
| + | |||
| + | Po aplikaci změn můžeš ověřit, zda omezení swapu funguje: | ||
| + | |||
| + | <code bash> | ||
| + | cat / | ||
| + | </ | ||
| + | |||
| + | Pokud se ve výstupu zobrazí správná hodnota (např. **500 MB**), konfigurace funguje. | ||
| + | |||
| + | Pokud chceš zjistit, které procesy v cgroup běží: | ||
| + | |||
| + | <code bash> | ||
| + | cat / | ||
| + | </ | ||
| + | |||
| + | 📌 **Tímto způsobem lze swapování jemně řídit na úrovni uživatelů i jednotlivých aplikací.** | ||
| ==== Použití `zswap` ==== | ==== Použití `zswap` ==== | ||
| - | Alternativou ke klasickému swapování na disk je použití **zswap**, | + | Pokud nechceš dynamické swap soubory, ale raději kompresi dat v RAM, můžeš |
| - | Pro aktivaci | + | **Aktivace |
| <code bash> | <code bash> | ||
| - | sudo grubby --update-kernel=ALL --args=" | + | echo zswap.enabled=1 |
| + | sudo update-grub | ||
| sudo reboot | sudo reboot | ||
| </ | </ | ||
| - | Ověření, že `zswap` | + | Po restartu ověř, zda je `zswap` aktivní: |
| <code bash> | <code bash> | ||
| Řádek 265: | Řádek 357: | ||
| </ | </ | ||
| - | Pokud vrátí | + | Výstup by měl být **`Y`**, což znamená, že `zswap` je zapnutý. |
| - | + | ||
| - | Tímto způsobem jsem úspěšně omezil nadměrné swapování na disk a zlepšil výkon systému. | + | |
| + | 📌 **Tím swapování probíhá primárně v RAM a na disk jde méně dat, což snižuje opotřebení disku a zlepšuje výkon.** | ||