Ce este Swap?

Swap-ul este o zonă de pe hard disk desemnată ca spațiu unde sistemul de operare poate să stocheze temporar date pe care nu le mai poate ține în memoria RAM. Practic, acesta vă oferă posibilitatea de a crește cantitatea de informații pe care serverul dumneavoastră o poate păstra în "memorie". Spațiul de swap de pe hard disk va fi utilizat în special atunci când spațiul din memorial RAM nu mai este suficient pentru a ține datele folosite de aplicațiile care rulează.

Informațiile scrise pe disc vor fi mult mai lente decât informațiile păstrate în memoria RAM, dar sistemul de operare va prefera să mențină în continuare datele aplicației în memorie și să utilizeze swap pentru datele mai vechi. În general, având un spațiu de schimb ca rezervă atunci când memoria RAM a sistemului este epuizată, poate fi o metodă de siguranță bună impotriva situațiilor in care sistemele non-SSD dau erori "out-of-memory".

Pasul 1 - Verificăm sistemul dacă are deja Swap activ

Înainte să începem, verificăm dacă nu cumva este deja setat spațiul de swap. Este posibil să avem mai multe partiții sau fișiere de swap, dar în general un singur spațiu de swap este sufcient.

Putem vedea dacă sistemul are setat swap tastând:

sudo swapon --show

Dacă nu primiți nici un răspuns, înseamnă că sistemul nu dispune de spațiu de swap disponibil.

Puteți verifica dacă nu exista nici un spatiu swap activ, folosind free :

free -h
              total        used        free      shared  buff/cache   available
Mem:           985M         84M        222M        680K        678M        721M
Swap:            0B          0B          0B

După cum vedeți, pe rândul Swap al răspunsului, nu există nici un spațiu disponibil pe sistem.

Pasul 2 - Verificăm spațiul disponibil pe HDD

Înainte de a crea fișierul de swap, verificăm dacă hard disk-ul dispune de spațiu liber suficient:

df -h
Filesystem      Size  Used Avail Use% Mounted on
udev            481M     0  481M   0% /dev
tmpfs            99M  656K   98M   1% /run
/dev/vda1        25G  1.4G   23G   6% /
tmpfs           493M     0  493M   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           493M     0  493M   0% /sys/fs/cgroup
/dev/vda15      105M  3.4M  102M   4% /boot/efi
tmpfs            99M     0   99M   0% /run/user/1000

Zona cu / din coloana Mounted on este disk-ul nostru în acest caz (doar 1.4G sunt folosiți). Situația dumneavoastră va fi probabil diferită.

Pasul 3 - Crearea spațiului Swap

Acum, când știm spațiul disponibil pe hard disk, putem crea fișierul swap în sistemul nostru de fișiere. Vom aloca dimensiunea pe care o dorim a fișierului de swap pe root /.

Cea mai bună metodă de a crea fișierul de swap este folosind fallout. Această comandă crează instantaneu un fișier cu dimensiunea specificată.

Deoarece serverul folosit în acest exemplu are 1G de RAM, vom crea un fișier de 1G. Puteți crea un fișier de dimensiunea dorită, în funcție de nevoile propriului sistem.

sudo fallocate -l 1G /swapfile

Putem verifica dacă spațiul corect a fost rezervat introducând:

ls -lh /swapfile
-rw-r--r-- 1 root root 1.0G Jun 17 13:25 /swapfile

Fișierul nostru a fost creat cu dimensiunea corectă.

Pasul 4 - Activarea fișierului Swap

Acum că avem un fișier de dimensiunea corectă disponibil, trebuie să-l transformăm în swap.

În primul rând trebuie să blocăm permisiunile fișierului, astfel încât numai utilizatorii cu privilegii de root să poată citi conținutul. Acest lucru împiedică accesul utilizatorilor normali la fișier, ceea ce ar avea implicații semnificative asupra securitații.

Faceți fișierul accesibil doar pentru root, tastând:

sudo chmod 600 /swapfile

Verificați modificarea permisiunilor introducând:

ls -lh /swapfile
-rw------- 1 root root 1.0G Jun 17 13:26 /swapfile

După cum puteți vedea, numai utilizatorii cu drepturi de root au active funcțiile de citire/scriere.

Putem marca acum fișierul ca spațiu de swap introducând:

sudo mkswap /swapfile
Setting up swapspace version 1, size = 1024 MiB (1073737728 bytes)
no label, UUID=6e965805-2ab9-450f-aed6-577e74089dbf

După marcarea fișierului, putem activa fișierul de swap, permițând sistemului nostru să înceapă să îl folosească:

sudo swapon /swapfile

Verificați dacă swap-ul este disponibil introducând:

sudo swapon --show
NAME      TYPE  SIZE USED PRIO
/swapfile file 1024M   0B   -2

Putem verifica din nou cu free dacă swap-ul este activ și vizibil în sistem:

free -h
              total        used        free      shared  buff/cache   available
Mem:           985M         84M        220M        680K        680M        722M
Swap:          1.0G          0B        1.0G

Swap-ul nostru a fost creat cu succes și sistemul nostru de operare va începe să-l folosească la nevoie.

Pasul 5 - Setarea permanentă a fișierului Swap

Până acum am activat fișierul swap pentru sesiunea curentă. Dacă repornim sistemul, nu se vor păstra setările. Pentru a schimba acest lucru, trebuie să adăugăm fișierul swap în /etc/fstab.

Faceți un backup al fisierului /etc/fstab în cazul în care ceva nu merge bine:

sudo cp /etc/fstab /etc/fstab.bak

Adăugați informațiile fișierului de swap la sfârșitul fișierului /etc/fstab tastând:

echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

Pasul 6 - Customizarea setarilor pentru Swap

Există câteva opțiuni pe care le puteți configura care vor avea un impact asupra performanței sistemului dvs. atunci când se folosește de swap.

Ajustarea proprietății Swappiness

Parametrul swappiness configurează cât de des sistemul dumneavoastră face schimb de date din RAM în spațiul de swap. Aceasta este o valoare între 0 și 100, care reprezintă un procentaj.

Cu valori apropiate de zero, kernelul nu va schimba datele pe disc decât dacă este absolut necesar. Rețineți că interacțiunile cu fișierul swap sunt "scumpe", deoarece durează mult mai mult decât interacțiunile cu memoria RAM și pot duce la o reducere semnificativă a performanței. Spunând că sistemul nu se bazează pe swap, va face în general sistemul dumneavoastră mai rapid.

Valorile care sunt mai aproape de 100 vor încerca să pună mai multe date în schimb într-un efort de a păstra mai mult spațiu liber în RAM. În funcție de profilul de memorie al aplicațiilor dumneavoastră sau de ceea ce utilizați pe server, acest lucru poate fi mai bun în unele cazuri.

Putem vedea valoarea curentă a swappiness tastând:

cat /proc/sys/vm/swappiness
60

Pentru un sistem Desktop, setarea swappiness de 60 este o valoare bună. Pentru un server, poate doriți să îl mutați mai aproape de 0.

Putem seta swappiness la o valoare diferită, folosind comanda sysctl.

De exemplu, pentru a seta swappiness la 10, putem tasta:

sudo sysctl vm.swappiness=10
vm.swappiness = 10

Această setare va persista până la repornirea următoare. Putem seta această valoare automat la repornire prin adăugarea liniei în fișierul nostru /etc/sysctl.conf:

sudo nano /etc/sysctl.conf

La sfârșitul fișierului, adăugați:

vm.swappiness=10

Salvați și închideți fișierul când ați terminat.

Ajustarea proprietății Cache Pressure

O altă valoare pe care ați putea să o modificați este vfs_cache_pressure. Această setare configurează cât de mult va alege sistemul să stocheze informații inode și dentry peste alte date.

Puteți vedea valoarea curentă prin interogarea sistemului de fișiere proc:

cat /proc/sys/vm/vfs_cache_pressure
100

La valoarea 100, sistemul nostru elimină prea repede informațiile inode din memoria cache. Putem modifica acest lucru prin setarea vfs_cache_pressure la 50 tastând:

sudo sysctl vm.vfs_cache_pressure=50
vm.vfs_cache_pressure = 50

Din nou, acest lucru este valabil numai pentru sesiunea noastră curentă. Putem schimba acest lucru adăugându-l în fișierul nostru de configurare, așa cum am făcut-o cu setarea de swappiness:

sudo nano /etc/sysctl.conf

La sfârșit, adaugați linia care specifică noua valoare:

vm.vfs_cache_pressure=50

Salvați și închideți fișierul când ați terminat.

Concluzii

Urmând pașii din acest tutorial veți reuși să evitați erorile apărute în cazul situațiilor de "out-of-memory". Spațiul de Swap poate fi extrem de util pentru a evita unele dintre aceste probleme comune.