O versiune anterioară a acestui tutorial a fost scrisă de Justin Ellingwood
- Introducere
- Ce este Swap?
- Pasul 1 – Verificarea sistemului pentru informații swap
- Pasul 2 – Verificarea spațiului disponibil pe partiția hard disk
- Etapa 3 – Crearea unui fișier swap
- Pasul 4 – Activarea fișierului swap
- Etapa 5 – Efectuarea permanentă a fișierului swap
- Pasul 6 – Reglarea setărilor Swap
- Ajustarea proprietății Swappiness
- Ajustarea setării presiunii cache
- Concluzie
Introducere
Unul dintre cele mai simple moduri de a vă proteja împotriva erorilor de pierdere a memoriei în aplicații este să adăugați spațiu de swap pe serverul dumneavoastră. În acest ghid, vom acoperi modul de adăugare a unui fișier swap pe un server Ubuntu 18.04.
Atenție: Deși swap-ul este în general recomandat pentru sistemele care utilizează hard disk-uri tradiționale rotative, utilizarea swap-ului cu SSD-uri poate cauza probleme cu degradarea hardware-ului în timp. Din cauza acestui considerent, nu recomandăm activarea swap pe DigitalOcean sau pe orice alt furnizor care utilizează stocare SSD. Făcând acest lucru poate avea un impact asupra fiabilității hardware-ului de bază pentru dvs. și vecinii dvs. Acest ghid este furnizat ca referință pentru utilizatorii care ar putea avea sisteme cu discuri rotative în altă parte.
Dacă aveți nevoie să îmbunătățiți performanța serverului dvs. pe DigitalOcean, vă recomandăm să vă actualizați Dropletul. Acest lucru va duce la rezultate mai bune în general și va scădea probabilitatea de a contribui la probleme hardware care vă pot afecta serviciul.
Ce este Swap?
Swap este o zonă de pe un hard disk care a fost desemnată ca un loc în care sistemul de operare poate stoca temporar datele pe care nu le mai poate păstra în memoria RAM. Practic, acest lucru vă oferă posibilitatea de a crește cantitatea de informații pe care serverul dvs. le poate păstra în „memoria” sa de lucru, cu unele avertismente. Spațiul swap de pe hard disk va fi utilizat în principal atunci când nu mai există suficient spațiu în RAM pentru a păstra datele aplicației în uz.
Informațiile scrise pe disc vor fi semnificativ mai lente decât cele păstrate în RAM, dar sistemul de operare va prefera să păstreze datele aplicației în curs de execuție în memorie și să utilizeze swap pentru datele mai vechi. În general, a avea spațiu de swap ca soluție de rezervă pentru atunci când memoria RAM a sistemului este epuizată poate fi o bună plasă de siguranță împotriva excepțiilor de ieșire din memorie pe sistemele care nu au la dispoziție spațiu de stocare pe SSD.
Pasul 1 – Verificarea sistemului pentru informații swap
Înainte de a începe, putem verifica dacă sistemul are deja spațiu de swap disponibil. Este posibil să aveți mai multe fișiere swap sau partiții swap, dar, în general, unul singur ar trebui să fie suficient.
Potem vedea dacă sistemul are vreun swap configurat tastând:
- sudo swapon --show
Dacă nu primiți niciun rezultat, înseamnă că sistemul nu are spațiu swap disponibil în prezent.
Puteți verifica dacă nu există nici un swap activ folosind utilitarul free
:
- free -h
Output total used free shared buff/cache availableMem: 985M 84M 222M 680K 678M 721MSwap: 0B 0B 0B
Așa cum puteți vedea în rândul Swap al ieșirii, nici un swap nu este activ pe sistem.
Pasul 2 – Verificarea spațiului disponibil pe partiția hard disk
Înainte de a ne crea fișierul swap, vom verifica utilizarea curentă a discului pentru a ne asigura că avem suficient spațiu. Faceți acest lucru introducând:
- df -h
OutputFilesystem Size Used Avail Use% Mounted onudev 481M 0 481M 0% /devtmpfs 99M 656K 98M 1% /run/dev/vda1 25G 1.4G 23G 6% /tmpfs 493M 0 493M 0% /dev/shmtmpfs 5.0M 0 5.0M 0% /run/locktmpfs 493M 0 493M 0% /sys/fs/cgroup/dev/vda15 105M 3.4M 102M 4% /boot/efitmpfs 99M 0 99M 0% /run/user/1000
Dispozitivul cu /
în coloana Mounted on
este discul nostru în acest caz. Avem destul spațiu disponibil în acest exemplu (doar 1,4G folosit). Probabil că utilizarea dvs. va fi diferită.
Deși există multe opinii cu privire la dimensiunea adecvată a unui spațiu de swap, aceasta depinde cu adevărat de preferințele dvs. personale și de cerințele aplicației. În general, o cantitate egală cu sau dublă față de cantitatea de memorie RAM de pe sistemul dvs. este un bun punct de plecare. O altă regulă bună este că orice depășește 4G de swap este probabil inutil dacă îl folosiți doar ca o soluție de rezervă pentru memoria RAM.
Etapa 3 – Crearea unui fișier swap
Acum că știm spațiul disponibil pe hard disk, putem crea un fișier swap pe sistemul nostru de fișiere. Vom aloca un fișier cu dimensiunea de swap pe care o dorim numit swapfile
în directorul nostru rădăcină (/).
Cel mai bun mod de a crea un fișier swap este cu programul fallocate
. Această comandă creează instantaneu un fișier de dimensiunea specificată.
Din moment ce serverul din exemplul nostru are 1G de RAM, vom crea un fișier de 1G în acest ghid. Ajustați acest lucru pentru a satisface nevoile propriului dvs. server:
- sudo fallocate -l 1G /swapfile
Potem verifica dacă a fost rezervată cantitatea corectă de spațiu tastând:
- ls -lh /swapfile
- -rw-r--r-- 1 root root 1.0G Apr 25 11:14 /swapfile
Fileul nostru a fost creat cu cantitatea corectă de spațiu rezervat.
Pasul 4 – Activarea fișierului swap
Acum că avem un fișier de dimensiunea corectă disponibil, trebuie să îl transformăm efectiv în spațiu swap.
În primul rând, trebuie să blocăm permisiunile fișierului astfel încât doar utilizatorii cu privilegii de root să poată citi conținutul. Acest lucru previne ca utilizatorii normali să poată accesa fișierul, ceea ce ar avea implicații de securitate semnificative.
Faceți ca fișierul să fie accesibil doar pentru root, tastând:
- sudo chmod 600 /swapfile
Verificați modificarea permisiunilor tastând:
- ls -lh /swapfile
Output -rw------- 1 root root 1.0G Apr 25 11:14 /swapfile
După cum puteți vedea, doar utilizatorul root are activate stegulețele de citire și scriere.
Acum putem marca fișierul ca spațiu de swap, tastând:
- sudo mkswap /swapfile
OutputSetting 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 utilizeze:
- sudo swapon /swapfile
Verificați că swap-ul este disponibil, tastând:
- sudo swapon --show
OutputNAME TYPE SIZE USED PRIO/swapfile file 1024M 0B -2
Potem verifica din nou ieșirea utilitarului free
pentru a ne corobora constatările:
- free -h
Output total used free shared buff/cache availableMem: 985M 84M 220M 680K 680M 722MSwap: 1.0G 0B 1.0G
Schimbul nostru a fost configurat cu succes, iar sistemul nostru de operare va începe să îl folosească în funcție de necesități.
Etapa 5 – Efectuarea permanentă a fișierului swap
Modificările noastre recente au activat fișierul swap pentru sesiunea curentă. Cu toate acestea, dacă repornim, serverul nu va păstra automat setările swap. Putem schimba acest lucru adăugând fișierul swap la fișierul nostru /etc/fstab
.
Realizați o copie de siguranță a fișierului /etc/fstab
în cazul în care ceva nu merge bine:
- sudo cp /etc/fstab /etc/fstab.bak
Adaugați informațiile despre fișierul swap la sfârșitul fișierului /etc/fstab
tastând:
- echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
În continuare vom trece în revistă câteva setări pe care le putem actualiza pentru a regla spațiul swap.
Pasul 6 – Reglarea setărilor Swap
Există câteva opțiuni pe care le puteți configura și care vor avea un impact asupra performanței sistemului dvs. atunci când aveți de-a face cu spațiul de swap.
Ajustarea proprietății Swappiness
Parametrul swappiness
configurează cât de des sistemul dvs. schimbă datele din RAM în spațiul de swap. Aceasta este o valoare între 0 și 100 care reprezintă un procent.
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 „costisitoare” în sensul că durează mult mai mult decât interacțiunile cu memoria RAM și pot cauza o reducere semnificativă a performanțelor. Spunându-i sistemului să nu se bazeze prea mult pe swap va face, în general, ca sistemul dvs. să fie mai rapid.
Valorile mai apropiate de 100 vor încerca să pună mai multe date în swap în încercarea de a păstra mai mult spațiu RAM liber. În funcție de profilul de memorie al aplicațiilor dvs. sau de ceea ce folosiți serverul dvs., acest lucru ar putea fi mai bun în unele cazuri.
Puteți vedea valoarea curentă de swappiness tastând:
- cat /proc/sys/vm/swappiness
Output60
Pentru un desktop, o setare de swappiness de 60 nu este o valoare rea. Pentru un server, s-ar putea să doriți să o apropiați de 0.
Puteți seta swappiness la o valoare diferită folosind comanda sysctl
.
De exemplu, pentru a seta swappiness la 10, am putea tasta:
- sudo sysctl vm.swappiness=10
Outputvm.swappiness = 10
Această setare va persista până la următoarea repornire. Putem seta această valoare în mod automat la repornire adăugând linia în fișierul nostru /etc/sysctl.conf
:
- sudo nano /etc/sysctl.conf
În partea de jos, puteți adăuga:
vm.swappiness=10
Salvați și închideți fișierul când ați terminat.
Ajustarea setării presiunii cache
O altă valoare conexă pe care ați putea dori să o modificați este vfs_cache_pressure
. Această setare configurează cât de mult va alege sistemul să pună în cache informațiile despre inode și dentry în detrimentul altor date.
În principiu, acestea sunt date de acces despre sistemul de fișiere. Acestea sunt, în general, foarte costisitoare de căutat și foarte frecvent solicitate, deci este un lucru excelent pentru ca sistemul să le pună în cache. Puteți vedea valoarea curentă prin interogarea din nou a sistemului de fișiere proc
:
- cat /proc/sys/vm/vfs_cache_pressure
Output100
După cum este configurat în prezent, sistemul nostru elimină prea repede din memoria cache informațiile despre inode. Putem seta acest lucru la o valoare mai conservatoare, cum ar fi 50, tastând:
- sudo sysctl vm.vfs_cache_pressure=50
Outputvm.vfs_cache_pressure = 50
Din nou, acest lucru este valabil doar pentru sesiunea noastră curentă. Putem schimba acest lucru adăugând-o la fișierul nostru de configurare așa cum am făcut cu setarea swappiness:
- sudo nano /etc/sysctl.conf
În partea de jos, adăugați linia care specifică noua valoare:
vm.vfs_cache_pressure=50
Salvați și închideți fișierul când ați terminat.
Concluzie
Să urmați pașii din acest ghid vă va oferi un anumit spațiu de manevră în cazurile care altfel ar duce la excepții de out-of-memory. Spațiul swap poate fi incredibil de util în evitarea unora dintre aceste probleme comune.
Dacă vă confruntați cu erori OOM (out of memory) sau dacă constatați că sistemul dvs. nu poate utiliza aplicațiile de care aveți nevoie, cea mai bună soluție este să vă optimizați configurațiile aplicațiilor sau să vă actualizați serverul.
.