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:16] – [Jak vytvořit a zapnout swap file na Raspberry Pi] 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 107: Řádek 107:
 </code> </code>
  
-Následně jsem musel upravit **fstab**, aby se systém nesnažil používat původní swapovací soubor. Otevřel jsem fstab:+Následně jsem musel upravit **fstab**, aby se systém nesnažil používat původní swapovací soubor. Otevřel jsem `fstab`:
  
 <code bash> <code bash>
Řádek 120: Řádek 120:
 </code> </code>
  
-Nakonec jsem restartoval `swapspace`, aby začal fungovat správně:+---- 
 + 
 +=== Konfigurace `swapspace` === 
 +Po odstranění pevně definovaného swapu jsem upravil konfigurační soubor **`/etc/swapspace.conf`**, aby swapspace lépe reagoval na změny dostupné paměti. Soubor jsem otevřel k editaci: 
 + 
 +<code bash> 
 +sudo nano /etc/swapspace.conf 
 +</code> 
 + 
 +A upravil jsem následující parametry: 
 + 
 +<code ini> 
 +lower_freelimit=15 
 +upper_freelimit=20 
 +freetarget=18 
 +</code> 
 + 
 +=== Vysvětlení parametrů: === 
 +  * **`lower_freelimit=15`** – Pokud volná paměť klesne pod 15 %, swapspace začne vytvářet nový swapovací prostor. 
 +  * **`upper_freelimit=20`** – Pokud volná paměť přesáhne 20 %, swapspace začne odstraňovat nepotřebný swap. 
 +  * **`freetarget=18`** – Swapspace se snaží udržovat volnou paměť kolem 18 %. 
 + 
 +Tato konfigurace zajišťuje, že systém bude dynamicky udržovat vyvážené množství swapu podle aktuální dostupnosti paměti. 
 + 
 +---- 
 + 
 +=== Restart swapspace a ověření funkčnosti === 
 +Po úpravě konfigurace jsem restartoval `swapspace`, aby se změny projevily:
  
 <code bash> <code bash>
Řádek 126: Řádek 153:
 </code> </code>
  
-Ověření, že swapspace funguje správně, jsem provedl příkazem:+Ověření správné funkčnosti proběhlo příkazem:
  
 <code bash> <code bash>
Řádek 132: Řádek 159:
 </code> </code>
  
-Pokud se swapovací prostor dynamicky mění, znamená to, že `swapspace` funguje správně.+Pokud se swapovací prostor dynamicky mění podle potřeby, znamená to, že `swapspace` funguje správně
 + 
 +Tímto způsobem jsem zajistil, že swapování se bude řídit dynamicky podle skutečné potřeby systému, což přispívá k lepší správě paměti. 
 + 
 + 
 +=== Ověření správné funkčnosti swapspace === 
 + 
 +Po konfiguraci `swapspace` je důležité ověřit, zda vše funguje správně. K tomu jsem použil následující příkazy: 
 + 
 +<code bash> 
 +# Zobrazí aktuální využití swapu a volné paměti 
 +free -h 
 +</code> 
 + 
 +<code bash> 
 +# Sleduje logy swapspace a zobrazí posledních 50 záznamů 
 +journalctl -u swapspace --no-pager | tail -n 50 
 +</code> 
 + 
 +<code bash> 
 +# Zkontroluje stav swapspace služby 
 +systemctl status swapspace 
 +</code> 
 + 
 +<code bash> 
 +# Ověří, zda je nějaký swap aktivní 
 +swapon --summary 
 +</code> 
 + 
 +<code bash> 
 +# Sleduje dynamické vytváření a odstraňování swapu v reálném čase 
 +sudo tail -f /var/log/syslog | grep swapspace 
 +</code> 
 + 
 +<code bash> 
 +# Zobrazí detailní informace o aktuálně aktivních swapových zařízeních/souborech 
 +cat /proc/swaps 
 +</code> 
 + 
 +Pokud logy neobsahují žádné chyby a výstupy příkazů ukazují dynamické přidávání a odebírání swapu podle volné paměti, znamená to, že **swapspace funguje správně**. 
 + 
 + 
 +=== Simulace zaplnění RAM === 
 + 
 +Pokud chceš otestovat, zda se swap aktivuje při vysokém využití RAM, spusť tento test: 
 + 
 +<code bash> 
 +# Simuluje zátěž paměti – využije 90 % dostupné RAM po dobu 30 sekund 
 +stress-ng --vm 2 --vm-bytes 90% --timeout 30s 
 +</code> 
 + 
 +Po dokončení testu ověř, zda se swap aktivoval: 
 + 
 +<code bash> 
 +# Zkontroluje aktuální využití RAM a swapu 
 +free -h 
 +</code> 
 + 
 +<code bash> 
 +# Ověří, zda swapspace vytvořil nový swapovací soubor 
 +swapon --summary 
 +</code> 
 + 
 +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 
 +</code> 
 + 
 +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 /proc/sys/vm/drop_caches 
 +</code> 
 + 
 +Tento příkaz: 
 +- **`sync`** zajistí, že se všechna data z paměti zapíší na disk. 
 +- **`echo 3 > /proc/sys/vm/drop_caches`** vyprázdní cache, což okamžitě uvolní část paměti. 
 + 
 +3️⃣ Po uvolnění paměti jsem znovu zkontroloval využití RAM a swapu: 
 + 
 +<code bash> 
 +free -h 
 +</code> 
 + 
 +Pokud `swapspace` funguje správně, měl by swapovací soubor začít mizet, pokud dostupná RAM překročí hodnotu **upper_freelimit** nastavenou v `/etc/swapspace.conf`. 
 + 
 +Pokud se swap neodstranil, může být problém v konfiguraci `swapspace`, který je potřeba dále analyzovat.
  
----- 
  
 ==== 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 176: Řá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.1739535408.txt.gz
  • Poslední úprava: 2025/02/14 12:16
  • autor: Petr Nosek