it:server:pamet-ram-swap

Rozdíly

Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.

Odkaz na výstup diff

Obě strany předchozí revize Předchozí verze
Následující verze
Předchozí verze
it:server:pamet-ram-swap [2025/02/14 12:23] – [Instalace a konfigurace `swapspace`] Petr Nosekit:server:pamet-ram-swap [2025/02/14 12:29] (aktuální) – [Použití `cgroups` k omezení swapování per proces] Petr Nosek
Řádek 259: Řádek 259:
 ==== 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í, je využití **cgroups** k nastavení limitu swapu pro konkrétní procesy. Cgroups umožňují řídit využití zdrojů na úrovni jednotlivých skupin procesů.+Další možností, jak omezit swapování, je využití **cgroups**, které umožňují řídit využití zdrojů pro jednotlivé procesy nebo uživatelské skupiny. V Xubuntu (a obecně v systémech založených na Ubuntu/Debianu) lze nastavit omezení swapování pomocí `systemd` a `cgroups v2`.
  
-Pro zapnutí omezení swapu v cgroups jsem nejprve povolil swapový limit v jádře:+=== Povolení swapového limitu v jádře === 
 + 
 +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="swapaccount=1"+echo "GRUB_CMDLINE_LINUX_DEFAULT=\"$GRUB_CMDLINE_LINUX_DEFAULT swapaccount=1\"" | sudo tee -a /etc/default/grub 
 +sudo update-grub
 sudo reboot sudo reboot
 </code> </code>
  
-Pak jsem vytvořil cgroup pro omezení swapování a nastavil maximální swap na **500 MB**:+Po restartu ověř, zda je swapový limit aktivní: 
 + 
 +<code bash> 
 +cat /proc/cmdline | grep swapaccount=1 
 +</code> 
 + 
 +Pokud se ve výstupu objeví `swapaccount=1`, je nastavení aktivní. 
 + 
 +=== Zakázání swapování pro všechny procesy uživatele === 
 + 
 +Pokud chceš zcela zakázat swap pro všechny procesy běžící pod aktuálním uživatelem (např. u desktopového prohlížeče), použij: 
 + 
 +<code bash> 
 +sudo systemctl set-property user-$(id -u).slice MemorySwapMax=0 
 +</code> 
 + 
 +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 na konkrétní službu spravovanou systemd, například prohlížeč běžící jako služba: 
 + 
 +<code bash> 
 +sudo systemctl set-property firefox.service MemorySwapMax=0 
 +</code> 
 + 
 +=== 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️⃣ **Vytvoř cgroup pro daný proces**:
  
 <code bash> <code bash>
 sudo mkdir -p /sys/fs/cgroup/memory/limited_swap sudo mkdir -p /sys/fs/cgroup/memory/limited_swap
 +</code>
 +
 +2️⃣ **Nastav maximální povolený swap na 500 MB**:
 +
 +<code bash>
 echo 500M | sudo tee /sys/fs/cgroup/memory/limited_swap/memory.memsw.limit_in_bytes echo 500M | sudo tee /sys/fs/cgroup/memory/limited_swap/memory.memsw.limit_in_bytes
 +</code>
 +
 +3️⃣ **Přidej běžící proces do této cgroup**:
 +
 +<code bash>
 echo $$ | sudo tee /sys/fs/cgroup/memory/limited_swap/cgroup.procs echo $$ | sudo tee /sys/fs/cgroup/memory/limited_swap/cgroup.procs
 </code> </code>
  
-Tím jsem zajistil, že procesy běžící v této skupině nemohou využít více než 500 MB swapu.+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 /sys/fs/cgroup/memory/limited_swap/memory.memsw.limit_in_bytes 
 +</code> 
 + 
 +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 /sys/fs/cgroup/memory/limited_swap/cgroup.procs 
 +</code> 
 + 
 +📌 **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**, což je kompresní mechanismus pro swapovaná dataUmožňuje systémům odložit swapovaná data do RAM komprimované podobě místo zápisu na disk, což zlepšuje výkon.+Pokud nechceš dynamické swap soubory, ale raději kompresi dat v RAM, můžeš použít **zswap**, který je součástí jádra`zswap` uchovává swapovaná data v RAM ve **zkomprimované podobě** a na disk zapisuje pouze tehdypokud už není místo.
  
-Pro aktivaci `zswap` stačilo zavést parametr při startu systému:+**Aktivace `zswap`**:
  
 <code bash> <code bash>
-sudo grubby --update-kernel=ALL --args="zswap.enabled=1"+echo zswap.enabled=1 | sudo tee -a /etc/default/grub.d/99-zswap.cfg 
 +sudo update-grub
 sudo reboot sudo reboot
 </code> </code>
  
-Ověřeníže `zswap` je aktivní:+Po restartu ověř, zda je `zswap` aktivní:
  
 <code bash> <code bash>
Řádek 297: Řádek 357:
 </code> </code>
  
-Pokud vrátí `Y`, znamená to, že zswap funguje správně. +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.**
  
  • it/server/pamet-ram-swap.1739535821.txt.gz
  • Poslední úprava: 2025/02/14 12:23
  • autor: Petr Nosek