Diferențe

Aici sunt prezentate diferențele dintre versiunile selectate și versiunea curentă a paginii.

Link către această vizualizare comparativă

Urmatoarea versiune
Versiuni anterioare
swap [2026/05/17 07:27] – creat thinkrootswap [2026/05/20 07:04] (curent) – [Swap pe desktop vs server] thinkroot
Linia 1: Linia 1:
-====== Swap și swappiness ======+====== Swap pe Linux ======
  
-Swap-ul este o zonă de stocare - fie o partiție dedicată, fie un fișier - pe care kernelul Linux o folosește ca extensie memoriei RAM. Când RAM-ul fizic se umple sau kernelul decide că anumite pagini de memorie nu au fost accesate de multle mută în swap pentru a elibera RAM pentru procese mai activeProcesul invers, aducerea paginilor înapoi din swap în RAM, se numește //swapping in//.+Swap-ul este o componentă fundamentală a gestionării memoriei pe Linuxprezentă pe aproape orice instalare, de la un Raspberry Pi cu 512MB RAM până la un server cu zeci de gigabyțiÎnțelegerea modului în care funcționează și cum îl configurezi corect face diferența între un sistem care răspunde fluid și unul care se blochează periodic fără un motiv aparent.
  
-===== De ce există swap =====+===== Ce este swap-ul =====
  
-Pe un server care rulează multe serviciie normal ca unele procese să fie inactive perioade lungi de timp. Fără swapkernelul ar fi forțat să țină în RAM toate procesele indiferent dacă sunt active sau nusau să termine forțat procese când memoria se epuizează (OOM killer). Swap-ul oferă o plasă de siguranță - procesele inactive pot fi mutate temporar pe disc, eliberând RAM pentru cele care au nevoie.+Atunci când un program rulează, kernelul îi alocă pagini de memorie RAM - blocuri de obicei de 4KB - pentru coddate și stivă. La un moment datsuma tuturor paginilor alocate poate depăși RAM-ul fizic disponibil. Swap-ul este soluția kernelului pentru această situație: mută paginile de memorie mai puțin folosite pe un dispozitiv de stocare (HDD, SSD, partiție dedicată sau fișier), eliberând RAM pentru paginile active.
  
-Un aspect important de înțeles: **swap-ul nu se eliberează automat**. Dacă la un moment dat kernelul a mutat 500MB în swapacele pagini rămân acolo chiar dacă RAM-ul devine ulterior disponibil. Sunt aduse înapoi doar când procesul respectiv are nevoie de ele.+Procesul are două direcții: **swapping out** înseamnă mutarea paginilor din RAM pe disciar **swapping in** înseamnă aducerea lor înapoi când sunt necesare. Fiecare operație de swapping in provoacă o mică întârziere - procesul trebuie să aștepte ca datele să fie citite de pe disc înainte de a putea continua, ceea ce pe un HDD clasic poate fi semnificativ.
  
-===== swappiness =====+Un detaliu important: swap-ul nu este o soluție pentru lipsa de RAM, ci o plasă de siguranță. Un sistem care folosește swap intensiv este un sistem care are nevoie de mai multă memorie fizică. Swap-ul previne crash-urile, dar nu înlocuiește RAM-ul.
  
-''vm.swappiness'' este un parametru al kernelului care controlează cât de agresiv folosește sistemul swap-ul. Valoarea poate fi între 0 și 200, iar valoarea implicită pe majoritatea distribuțiilor este **60**.+===== Tipuri de swap =====
  
-^ Valoare ^ Comportament ^ +Pe Linux există două modalități de a crea spațiu de swap, cu avantaje și dezavantaje diferite.
-| 0 | Kernelul evită swap-ul pe cât posibil, folosindu-l doar când RAM-ul e aproape epuizat | +
-| 60 | Comportament echilibrat, valoarea implicită +
-| 100+ | Kernelul paginează agresiv în swap, chiar dacă există RAM disponibil |+
  
-Pe un server sau desktop cu RAM suficient, o valoare mai mică (10-20) este de preferat - sistemul va prefera să elibereze cache din RAM în loc să pagineze procese în swap, ceea ce înseamnă timp de răspuns mai bun când procesele au nevoie de memorie.+==== Partiție swap ====
  
-===== Verificare și configurare =====+O partiție swap este o partiție dedicată pe disc, creată de obicei în timpul instalării sistemului de operare. Avantajul principal este performanța ușor superioară față de un fișier swap, deoarece kernelul poate accesa direct blocurile de pe disc fără overhead-ul sistemului de fișiere. Dezavantajul este inflexibilitatea - dimensiunea este fixă și nu o poți redimensiona ușor fără să repartiționezi discul.
  
-Verifici valoarea curentă cu:+La instalarea majorității distribuțiilor Linux, programul de instalare creează automat o partiție swap. Poți identifica partițiile swap existente cu: 
 + 
 +<code bash> 
 +swapon --show 
 +</code> 
 + 
 +sau 
 + 
 +<code bash> 
 +cat /proc/swaps 
 +</code> 
 + 
 +==== Fișier swap ==== 
 + 
 +Un fișier swap este un fișier obișnuit pe sistemul de fișiere care funcționează ca spațiu de swap. Avantajele sunt flexibilitatea - îl poți crea, șterge și redimensiona oricând, fără să modifici schema de partiționare - și portabilitatea, putând fi mutat dacă e nevoie de spațiu pe altă partiție. Performanța este practic identică cu o partiție swap pe sistemele de fișiere moderne, diferența măsurabilă existând doar în scenarii foarte specifice. 
 + 
 +Pe distribuții moderne (Ubuntu, Fedora, Arch) instalările recente folosesc implicit un fișier swap în loc de o partiție dedicată, tocmai datorită flexibilității. 
 + 
 +===== Crearea swap-ului ===== 
 + 
 +==== Creare partiție swap ==== 
 + 
 +Dacă vrei să creezi o partiție swap pe un disc sau pe spațiu nealocat, folosești un instrument de partiționare precum ''fdisk'' sau ''gdisk''. Partiția trebuie să aibă tipul **82** (Linux swap) în cazul MBR sau **8200** pentru GPT. 
 + 
 +După creare, formatezi partiția ca swap: 
 + 
 +<code bash> 
 +mkswap /dev/sdXN 
 +</code> 
 + 
 +unde ''/dev/sdXN'' este partiția creată. Activezi swap-ul imediat: 
 + 
 +<code bash> 
 +swapon /dev/sdXN 
 +</code> 
 + 
 +Pentru activare automată la pornire, adaugi în ''/etc/fstab'': 
 + 
 +<code> 
 +/dev/sdXN  none  swap  sw  0  0 
 +</code> 
 + 
 +==== Creare fișier swap ==== 
 + 
 +Crearea unui fișier swap este mai simplă și nu necesită modificarea partițiilor. Pașii de mai jos creează un fișier swap de 2GB: 
 + 
 +Creezi fișierul cu ''fallocate'' (rapid) sau ''dd'' (mai compatibil): 
 + 
 +<code bash> 
 +fallocate -l 2G /swapfile 
 +</code> 
 + 
 +Dacă ''fallocate'' nu funcționează pe sistemul tău de fișiere (de exemplu pe Btrfs), folosești ''dd'': 
 + 
 +<code bash> 
 +dd if=/dev/zero of=/swapfile bs=1M count=2048 status=progress 
 +</code> 
 + 
 +Setezi permisiunile corecte - fișierul trebuie să fie citibil și editabil doar de root: 
 + 
 +<code bash> 
 +chmod 600 /swapfile 
 +</code> 
 + 
 +Formatezi fișierul ca swap: 
 + 
 +<code bash> 
 +mkswap /swapfile 
 +</code> 
 + 
 +Activezi swap-ul: 
 + 
 +<code bash> 
 +swapon /swapfile 
 +</code> 
 + 
 +Verifici că e activ: 
 + 
 +<code bash> 
 +swapon --show 
 +</code> 
 + 
 +Pentru activare automată la pornire, adaugi în ''/etc/fstab'': 
 + 
 +<code> 
 +/swapfile  none  swap  sw  0  0 
 +</code> 
 + 
 +==== Swap pe Btrfs ==== 
 + 
 +Btrfs necesită pași suplimentari pentru fișierul swap. Fișierul trebuie să fie pe un subvolum dedicat, fără compresie și fără Copy-on-Write activat: 
 + 
 +<code bash> 
 +btrfs subvolume create /swap 
 +btrfs filesystem mkswapfile --size 2G /swap/swapfile 
 +swapon /swap/swapfile 
 +</code> 
 + 
 +===== Dezactivarea și ștergerea swap-ului ===== 
 + 
 +Dezactivezi swap-ul temporar cu: 
 + 
 +<code bash> 
 +swapoff /swapfile 
 +</code> 
 + 
 +sau pentru tot swap-ul simultan: 
 + 
 +<code bash> 
 +swapoff -a 
 +</code> 
 + 
 +Când dezactivezi swap-ul, kernelul mută toate paginile înapoi în RAM. Dacă nu există suficient RAM disponibil, comanda va eșua sau sistemul va deveni foarte lent. Reactivezi cu: 
 + 
 +<code bash> 
 +swapon -a 
 +</code> 
 + 
 +Această pereche de comenzi (''swapoff -a && swapon -a'') este utilă pentru a goli swap-ul acumulat fără a reporni sistemul. 
 + 
 +Pentru a șterge complet un fișier swap, îl dezactivezi mai întâi, apoi îl ștergi: 
 + 
 +<code bash> 
 +swapoff /swapfile 
 +rm /swapfile 
 +</code> 
 + 
 +Nu uita să elimini și linia corespunzătoare din ''/etc/fstab''
 + 
 +===== Dimensiunea recomandată ===== 
 + 
 +Nu există o regulă universală, dar există câteva ghiduri practice: 
 + 
 +^ RAM fizic ^ Swap recomandat (fără hibernare) ^ Swap recomandat (cu hibernare) ^ 
 +| Sub 2GB | Egal cu RAM-ul | De două ori RAM-ul | 
 +| 2GB - 8GB | Jumătate din RAM | Egal cu RAM-ul | 
 +| 8GB - 64GB | Minim 4GB | Egal cu RAM-ul | 
 +| Peste 64GB | 4-8GB | Depinde de utilizare | 
 + 
 +Hibernarea (suspend to disk) necesită ca swap-ul să fie cel puțin egal cu RAM-ul fizic, deoarece întregul conținut al RAM-ului este scris pe disc la hibernare. 
 + 
 +Pe un server fără hibernare și cu RAM suficient, 1-2GB de swap este de obicei suficient ca plasă de siguranță. Pe un desktop cu puțin RAM, swap-ul generos poate face diferența între un sistem utilizabil și unul care blochează. 
 + 
 +===== Priorități swap ===== 
 + 
 +Poți avea mai multe spații de swap active simultan - de exemplu o partiție și un fișier - și poți controla ordinea în care kernelul le folosește prin priorități. Valoarea implicită este -2 pentru fișierele din fstab. 
 + 
 +Setezi prioritatea la activare: 
 + 
 +<code bash> 
 +swapon --priority 10 /swapfile 
 +</code> 
 + 
 +sau în ''/etc/fstab'': 
 + 
 +<code> 
 +/swapfile  none  swap  sw,pri=10  0  0 
 +</code> 
 + 
 +Kernelul folosește mai întâi swap-ul cu prioritatea cea mai mare. Spațiile cu aceeași prioritate sunt folosite în paralel (round-robin), ceea ce poate îmbunătăți performanța dacă sunt pe discuri fizice diferite. 
 + 
 +===== swappiness ===== 
 + 
 +''vm.swappiness'' controlează cât de agresiv kernelul mută pagini în swap față de eliberarea cache-ului de pagini. Valoarea implicită este 60 pe majoritatea distribuțiilor. 
 + 
 +^ Valoare ^ Comportament ^ 
 +| 0 | Kernelul evită swap-ul, preferă să elibereze cache | 
 +| 10-20 | Recomandat pentru desktop și servere cu RAM suficient | 
 +| 60 | Valoarea implicită, echilibrat | 
 +| 100+ | Paginare agresivă în swap | 
 + 
 +Verifici valoarea curentă:
  
 <code bash> <code bash>
Linia 28: Linia 196:
 </code> </code>
  
-Schimbi valoarea temporar (se resetează la repornire):+Modifici temporar:
  
 <code bash> <code bash>
Linia 34: Linia 202:
 </code> </code>
  
-Faci modificarea permanentă adăugând în ''/etc/sysctl.conf'':+Modifici permanent în ''/etc/sysctl.conf'' sau ''/etc/sysctl.d/99-swap.conf'':
  
 <code> <code>
Linia 40: Linia 208:
 </code> </code>
  
-Aplici imediat fără repornire:+Aplici fără repornire:
  
 <code bash> <code bash>
Linia 46: Linia 214:
 </code> </code>
  
-===== Cum vezi ce procese folosesc swap =====+Pe un **desktop** o valoare de 10-20 face sistemul mai responsiv, deoarece kernelul va prefera să elibereze cache (care poate fi reconstruit oricând) în loc să pagineze procese active. Pe un **server** cu baze de date, unii administratori setează 1-10 pentru a menține datele bazei în RAM cât mai mult posibil.
  
-Pentru identifica procesele care ocupă cel mai mult swap:+===== Citirea corectă memoriei ===== 
 + 
 +Una dintre cele mai frecvente surse de confuzie pe Linux este interpretarea greșită a consumului de memorie. Comanda ''free -h'' arată ceva de genul: 
 + 
 +<code> 
 +               total        used        free      shared  buff/cache   available 
 +Mem:           7.7Gi       3.2Gi       1.1Gi       312Mi       3.4Gi       3.9Gi 
 +Swap:          2.0Gi       128Mi       1.9Gi 
 +</code> 
 + 
 +Coloana **used** include memoria ocupată de procese plus o parte din buff/cache, ceea ce poate părea alarmant. Coloana cu adevărat relevantă este **available** - aceasta reprezintă memoria care poate fi pusă la dispoziția proceselor fără a folosi swap, incluzând cache-ul care poate fi eliberat imediat. 
 + 
 +**buff/cache** nu este memorie pierdută - kernelul folosește RAM-ul liber pentru a cache-ui date de pe disc, accelerând citirile ulterioare. Dacă un proces are nevoie de memorie, kernelul eliberează automat o parte din cache. 
 + 
 +O regulă simplă: dacă **available** este aproape de zero și swap-ul crește continuu, sistemul are nevoie de mai mult RAM sau trebuie să închizi procese. Dacă **available** este rezonabil (câteva sute de MB sau mai mult), sistemul funcționează normal chiar dacă **used** pare mare. 
 + 
 +Pentru detalii complete despre consumul de memorie: 
 + 
 +<code bash> 
 +cat /proc/meminfo 
 +</code> 
 + 
 +Pentru a vedea ce procese consumă cel mai mult swap:
  
 <code bash> <code bash>
Linia 57: Linia 247:
 </code> </code>
  
-Dacă ai instalat ''smem'':+===== Monitorizare ===== 
 + 
 +Urmărești evoluția swap-ului în timp real cu ''vmstat''
 + 
 +<code bash> 
 +vmstat 2 
 +</code> 
 + 
 +Coloanele relevante sunt **si** (swap in - pagini aduse din swap în RAM) și **so** (swap out - pagini mutate din RAM în swap). Valori constant diferite de zero indică un sistem sub presiune de memorie. 
 + 
 +''htop'' afișează swap-ul în bara din partea de sus. Dacă preferi o comandă rapidă:
  
 <code bash> <code bash>
-smem -rs swap | head -20+watch -n 2 free -h
 </code> </code>
  
 ===== Golirea swap-ului ===== ===== Golirea swap-ului =====
  
-Dacă vrei să eliberezi swap-ul manual (funcționează doar dacă există suficient RAM liber pentru a prelua paginile din swap):+Swap-ul nu se eliberează automat după ce presiunea pe memorie scade - paginile rămân pe disc până când procesele au nevoie de ele. Dacă vrei să eliberezi swap-ul manual și ai suficient RAM disponibil:
  
 <code bash> <code bash>
Linia 71: Linia 271:
 </code> </code>
  
-Această comandă dezactivează swap-ul (forțând kernelul să mute totul înapoi în RAMși îl reactivează imediatDacă RAM-ul nu este suficient, comanda va eșua sau sistemul va deveni foarte lent în timp ce mută datele.+Această operație mută toate paginile din swap înapoi în RAM și resetează spațiul de swapE utilă după ce ai oprit procese mari care consumaseră mult RAM și vrei să recuperezi swap-ul fără repornire. 
 + 
 +===== Swap pe desktop vs server =====
  
-===== Swap pe un server cu multe containere Docker =====+Pe un **desktop**, swap-ul generos și swappiness scăzut (10-20) oferă cel mai bun echilibru - sistemul rămâne responsiv, iar aplicațiile inactive pot fi paginate fără a afecta experiența utilizatorului.
  
-Pe un VPS care rulează multiple containere Dockerswap-ul crescut este adesea cauzat de servicii care consumă mult RAM dar sunt rar folosite. Fiecare container are propriul consum, iar suma totală poate depăși RAM-ul disponibil în perioadele de vârf.+Pe un **server**abordarea depinde de serviciile rulate. Un server de baze de date preferă să țină cât mai multe date în RAM și beneficiază de swappiness foarte scăzut (1-10). Un server cu multe servicii mici poate funcționa bine cu swappiness 10-20 și un swap de 1-2GB ca plasă de siguranță.
  
-Soluții practice în această situație: +Pe sisteme cu **puțin RAM** (Raspberry Pi, VPS-uri mici), swap-ul poate fi diferența dintre un sistem funcțional și unul care termină forțat procese prin OOM KillerPe aceste sisteme merită explorat și [[zram_si_zswap|zram și zswap]], care oferă compresie în RAM și sunt mai rapide decât swap-ul clasic pe disc.
-  Setează ''vm.swappiness=10'' pentru a reduce agresivitatea paginării +
-  * Oprește containerele care nu sunt folosite activ +
-  * Adaugă limite de memorie per container în ''docker-compose.yml'' cu ''mem_limit'' +
-  * Verifică periodic consumul cu ''docker stats --no-stream''+
  
-{{tag>linux swap memorie kernel docker server}}+{{tag>linux swap memorie kernel desktop server}}