Diferențe
Aici sunt prezentate diferențele dintre versiunile selectate și versiunea curentă a paginii.
| Urmatoarea versiune | Versiuni anterioare | ||
| swap [2026/05/17 07:27] – creat thinkroot | swap [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 | + | Swap-ul este o componentă fundamentală a gestionării memoriei pe Linux, prezentă 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 |
| - | ===== De ce există | + | ===== Ce este swap-ul ===== |
| - | Pe un server care rulează | + | Atunci când un program |
| - | Un aspect important de înțeles: **swap-ul nu se eliberează automat**. Dacă la un moment dat kernelul a mutat 500MB în swap, acele pagini rămân acolo chiar dacă RAM-ul devine ulterior disponibil. Sunt aduse înapoi | + | Procesul are două direcții: **swapping out** înseamnă mutarea paginilor din RAM pe disc, iar **swapping in** înseamnă aducerea lor înapoi când sunt necesare. Fiecare operație de swapping in provoacă o mică întârziere - procesul |
| - | ===== 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, |
| - | '' | + | ===== Tipuri |
| - | ^ 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 |
| - | ===== Verificare | + | 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ă | + | 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 | ||
| + | </ | ||
| + | |||
| + | sau | ||
| + | |||
| + | <code bash> | ||
| + | cat / | ||
| + | </ | ||
| + | |||
| + | ==== 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, | ||
| + | |||
| + | 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 '' | ||
| + | |||
| + | După creare, formatezi partiția ca swap: | ||
| + | |||
| + | <code bash> | ||
| + | mkswap /dev/sdXN | ||
| + | </ | ||
| + | |||
| + | unde ''/ | ||
| + | |||
| + | <code bash> | ||
| + | swapon /dev/sdXN | ||
| + | </ | ||
| + | |||
| + | Pentru activare automată la pornire, adaugi în ''/ | ||
| + | |||
| + | < | ||
| + | / | ||
| + | </ | ||
| + | |||
| + | ==== 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 '' | ||
| + | |||
| + | <code bash> | ||
| + | fallocate -l 2G /swapfile | ||
| + | </ | ||
| + | |||
| + | Dacă '' | ||
| + | |||
| + | <code bash> | ||
| + | dd if=/ | ||
| + | </ | ||
| + | |||
| + | Setezi permisiunile corecte - fișierul trebuie să fie citibil și editabil doar de root: | ||
| + | |||
| + | <code bash> | ||
| + | chmod 600 /swapfile | ||
| + | </ | ||
| + | |||
| + | Formatezi fișierul ca swap: | ||
| + | |||
| + | <code bash> | ||
| + | mkswap /swapfile | ||
| + | </ | ||
| + | |||
| + | Activezi swap-ul: | ||
| + | |||
| + | <code bash> | ||
| + | swapon /swapfile | ||
| + | </ | ||
| + | |||
| + | Verifici că e activ: | ||
| + | |||
| + | <code bash> | ||
| + | swapon --show | ||
| + | </ | ||
| + | |||
| + | Pentru activare automată la pornire, adaugi în ''/ | ||
| + | |||
| + | < | ||
| + | / | ||
| + | </ | ||
| + | |||
| + | ==== 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 / | ||
| + | swapon / | ||
| + | </ | ||
| + | |||
| + | ===== Dezactivarea și ștergerea swap-ului ===== | ||
| + | |||
| + | Dezactivezi swap-ul temporar cu: | ||
| + | |||
| + | <code bash> | ||
| + | swapoff /swapfile | ||
| + | </ | ||
| + | |||
| + | sau pentru tot swap-ul simultan: | ||
| + | |||
| + | <code bash> | ||
| + | swapoff -a | ||
| + | </ | ||
| + | |||
| + | 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 | ||
| + | </ | ||
| + | |||
| + | Această pereche de comenzi ('' | ||
| + | |||
| + | Pentru a șterge complet un fișier swap, îl dezactivezi mai întâi, apoi îl ștergi: | ||
| + | |||
| + | <code bash> | ||
| + | swapoff /swapfile | ||
| + | rm /swapfile | ||
| + | </ | ||
| + | |||
| + | Nu uita să elimini și linia corespunzătoare din ''/ | ||
| + | |||
| + | ===== Dimensiunea recomandată ===== | ||
| + | |||
| + | Nu există o regulă universală, | ||
| + | |||
| + | ^ 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 | ||
| + | </ | ||
| + | |||
| + | sau în ''/ | ||
| + | |||
| + | < | ||
| + | / | ||
| + | </ | ||
| + | |||
| + | 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), | ||
| + | |||
| + | ===== swappiness ===== | ||
| + | |||
| + | '' | ||
| + | |||
| + | ^ 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: | ||
| </ | </ | ||
| - | Schimbi valoarea | + | Modifici |
| <code bash> | <code bash> | ||
| Linia 34: | Linia 202: | ||
| </ | </ | ||
| - | Faci modificarea | + | Modifici |
| < | < | ||
| Linia 40: | Linia 208: | ||
| </ | </ | ||
| - | Aplici | + | Aplici fără repornire: |
| <code bash> | <code bash> | ||
| Linia 46: | Linia 214: | ||
| </ | </ | ||
| - | ===== Cum vezi ce procese | + | 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 |
| - | Pentru | + | ===== Citirea corectă |
| + | |||
| + | Una dintre cele mai frecvente surse de confuzie pe Linux este interpretarea greșită a consumului de memorie. Comanda '' | ||
| + | |||
| + | < | ||
| + | | ||
| + | Mem: | ||
| + | Swap: 2.0Gi | ||
| + | </ | ||
| + | |||
| + | 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 | ||
| + | |||
| + | **buff/ | ||
| + | |||
| + | 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 / | ||
| + | </ | ||
| + | |||
| + | Pentru a vedea ce procese consumă cel mai mult swap: | ||
| <code bash> | <code bash> | ||
| Linia 57: | Linia 247: | ||
| </ | </ | ||
| - | Dacă ai instalat | + | ===== Monitorizare ===== |
| + | |||
| + | Urmărești evoluția swap-ului în timp real cu '' | ||
| + | |||
| + | <code bash> | ||
| + | vmstat 2 | ||
| + | </ | ||
| + | |||
| + | 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. | ||
| + | |||
| + | '' | ||
| <code bash> | <code bash> | ||
| - | smem -rs swap | head -20 | + | watch -n 2 free -h |
| </ | </ | ||
| ===== Golirea swap-ului ===== | ===== Golirea swap-ului ===== | ||
| - | Dacă vrei să eliberezi swap-ul manual | + | 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 |
| <code bash> | <code bash> | ||
| Linia 71: | Linia 271: | ||
| </ | </ | ||
| - | Această | + | Această |
| + | |||
| + | ===== Swap pe desktop vs server ===== | ||
| - | ===== Swap pe un server cu multe containere Docker ===== | + | Pe un **desktop**, |
| - | Pe un VPS care rulează multiple containere Docker, swap-ul crescut este adesea cauzat | + | Pe un **server**, abordarea depinde |
| - | 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 Killer. Pe aceste sisteme merită explorat |
| - | | + | |
| - | * Oprește containerele | + | |
| - | * Adaugă limite de memorie per container | + | |
| - | * Verifică periodic consumul cu '' | + | |
| - | {{tag> | + | {{tag> |