Adăugarea memoriei swap
Cum creați un fișier swap pe un server cu memorie puțină, cum îl reglați și când este mai bine să faceți upgrade.
Pe această pagină
Swap-ul este un spațiu pe disc pe care Linux îl folosește ca memorie de rezervă atunci când RAM-ul se umple. Ghidul arată cum creați un fișier swap, cum îl reglați și cum îl eliminați. Toate comenzile se rulează pe server, într-o sesiune SSH ca root (Conectarea la server prin SSH (Windows, macOS, Linux)). Câtă memorie RAM are planul dvs. vedeți în panoul app.blackbox.md: pe cardul serverului din „Serverele mele”, la „Configurație”.
Disponibil pentru: titularul serverului, cu acces SSH ca root. Comenzile sunt aceleași pe toate sistemele Linux disponibile la comandă: Ubuntu, Debian, AlmaLinux și CentOS Stream. Pe AlmaLinux și CentOS Stream se adaugă un singur pas, marcat în text.
Când ajută swap-ul
Swap-ul vă ajută dacă:
- serverul are 1–2 GB RAM;
- memoria se umple doar din când în când, de exemplu la un vârf de trafic sau la o sarcină programată;
- instalați sau compilați pachete (actualizări de sistem,
composer,npm), care cer multă memorie pentru scurt timp.
Fără swap, când memoria se termină, nucleul Linux oprește forțat un proces (OOM killer), de obicei pe cel mai mare: baza de date sau serverul web. Cu swap, serverul încetinește, dar procesele continuă să ruleze, cât timp nu se umple și swap-ul.
| Plan | RAM | Disc | Swap recomandat |
|---|---|---|---|
| Basic XS | 1 GB | 20 GB | 1 GB |
| Standard S | 2 GB | 20 GB | 1 GB |
| CPU S | 2 GB | 30 GB | 1 GB |
| Basic S | 2 GB | 50 GB | 2 GB |
Pe planurile cu 4 GB RAM sau mai mult, swap-ul de regulă nu este necesar. Un fișier de 1 GB poate rămâne ca rezervă pentru vârfuri rare.
Important Swap-ul nu înlocuiește RAM-ul: discul este de multe ori mai lent decât memoria. Dacă serverul folosește swap-ul tot timpul, are nevoie de un plan cu mai mult RAM. Semnele le găsiți mai jos, în secțiunea „Când aveți nevoie de un upgrade”.
Verificați memoria și swap-ul existent
free -h
swapon --showExemplu pe un server fără swap:
total used free shared buff/cache available
Mem: 1.9Gi 1.2Gi 118Mi 12Mi 640Mi 560Mi
Swap: 0B 0B 0B- Dacă rândul
Swap:arată0B, iarswapon --shownu afișează nimic, serverul nu are swap. BLACKBOX nu adaugă swap la instalarea serverului, așa că pe un server nou situația este de regulă aceasta. - Coloana
availablearată câtă memorie mai pot folosi aplicațiile. - La
Mem:,totaleste puțin mai mic decât RAM-ul planului: o parte este rezervată de sistem.
Dacă swapon --show afișează deja un fișier sau o partiție, nu creați încă unul. Ca să schimbați mărimea swap-ului existent, vedeți întrebările frecvente de la final.
Verificați și spațiul liber pe disc. În coloana Avail trebuie să rămână mult mai mult decât mărimea swap-ului pe care îl creați:
df -h /Creați fișierul swap
Comenzile creează fișierul /swapfile de 2 GB. Pentru 1 GB, scrieți 1G în loc de 2G.
Rezervați spațiul pe disc:
fallocate -l 2G /swapfileLăsați acces la fișier doar pentru
root:chmod 600 /swapfilePregătiți fișierul ca swap:
mkswap /swapfileDoar pe AlmaLinux și CentOS Stream, unde SELinux este activ, aplicați eticheta SELinux prevăzută pentru
/swapfile:restorecon -v /swapfileActivați swap-ul:
swapon /swapfileVerificați cu
swapon --show. Rezultatul arată astfel, iar înfree -hrândulSwap:nu mai este0B:NAME TYPE SIZE USED PRIO /swapfile file 2G 0B -2
Swap-ul rămâne activ până la următoarea repornire. Ca să se activeze singur la fiecare pornire, adăugați-l în /etc/fstab (secțiunea următoare).
Dacă fallocate nu funcționează
Dacă fallocate afișează Operation not supported sau swapon refuză fișierul (it appears to have holes sau Invalid argument), creați fișierul cu dd. Durează mai mult, dar dd scrie fișierul complet pe disc și funcționează și acolo unde fallocate nu merge. count este mărimea în MB: 2048 pentru 2 GB, 1024 pentru 1 GB.
rm -f /swapfile
dd if=/dev/zero of=/swapfile bs=1M count=2048 status=progressApoi continuați cu pașii 2–6 de mai sus.
Activați swap-ul la fiecare pornire
Faceți o copie a fișierului
/etc/fstab:cp /etc/fstab /etc/fstab.bakVerificați că nu există deja o linie pentru
/swapfile. Comanda nu trebuie să afișeze nimic:grep swapfile /etc/fstabAdăugați linia la sfârșitul fișierului:
echo '/swapfile none swap sw 0 0' >> /etc/fstabReîncărcați configurația systemd:
systemctl daemon-reloadVerificați linia fără să reporniți: dezactivați swap-ul și activați-l din nou din
/etc/fstab. Dacă/swapfileapare în rezultat, linia este corectă.swapoff /swapfile swapon -a swapon --show
Dacă ați greșit ceva în /etc/fstab, restaurați copia înainte de orice repornire:
cp /etc/fstab.bak /etc/fstabAtenție La pasul 3 scrieți două semne
>>. Cu un singur>, comanda înlocuiește tot conținutul/etc/fstab, iar serverul poate să nu mai pornească corect. Clienții nu au consolă web, deci nu ați putea repara fișierul după repornire. Dacă pierdeți accesul, scrieți-ne: Cum contactați suportul BLACKBOX.
Reglați swappiness
Parametrul vm.swappiness arată cât de ușor mută nucleul datele din RAM în swap. Valoarea implicită este de regulă 60. Cu valoarea 10, nucleul păstrează aplicațiile în RAM cât mai mult și mută date în swap mai ales când memoria este aproape plină.
Vedeți valoarea actuală:
cat /proc/sys/vm/swappinessSetați valoarea 10 imediat:
sysctl vm.swappiness=10Ca setarea să rămână după repornire, scrieți-o într-un fișier nou din
/etc/sysctl.d/. Aici un singur>este corect, pentru că fișierul este nou:echo 'vm.swappiness=10' > /etc/sysctl.d/99-swappiness.confVerificați fișierul. Rezultatul trebuie să fie
vm.swappiness = 10:sysctl -p /etc/sysctl.d/99-swappiness.conf
Când aveți nevoie de un upgrade
Swap-ul ajută la vârfuri rare. Dacă memoria lipsește tot timpul, soluția este mai mult RAM. Semnele sunt:
în
free -h,usedla rândulSwap:crește și rămâne mare, iaravailablelaMem:este aproape de zero;serverul răspunde greu, deși procesorul nu este încărcat;
în rezultatul comenzii de mai jos, coloanele
sișiso(date citite din swap și scrise în swap, pe secundă) sunt mai mari decât 0 la aproape fiecare măsurare:vmstat 1 5jurnalul nucleului arată procese oprite din lipsă de memorie (comanda arată mesajele de la ultima pornire):
journalctl -k | grep -i "out of memory"
Ce faceți:
- Aflați ce proces consumă memoria și dacă îl puteți regla: Diagnosticarea încărcării serverului (CPU, RAM, disc, rețea).
- Dacă aplicația are nevoie de mai multă memorie, treceți pe un plan mai mare din aceeași familie, cu butonul „Upgrade” de pe cardul serverului: Upgrade server: trecerea la un plan mai mare.
| Plan actual | Următorul plan din familie | RAM | Disc |
|---|---|---|---|
| Basic XS | Basic S | 1 → 2 GB | 20 → 50 GB |
| Basic S | Basic M | 2 → 4 GB | 50 → 100 GB |
| Standard S | Standard M | 2 → 4 GB | 20 → 40 GB |
| CPU S | CPU M | 2 → 4 GB | rămâne 30 GB |
Prețurile tuturor planurilor sunt în Planurile VPS: cum alegeți. Fișierul swap rămâne pe server după upgrade: îl puteți păstra ca rezervă sau îl puteți elimina.
Dacă serverul are serviciul suplimentar Monitoring, graficul „Utilizare RAM (%)” din blocul „Tendințe” al paginii „Monitorizare” arată consumul de memorie în timp. Graficul nu include swap-ul: pe acesta îl verificați pe server cu free -h. Detalii: Pagina „Monitorizare”.
Swap-ul și spațiul pe disc
- Fișierul swap ocupă pe disc toată mărimea lui, chiar dacă nu este folosit: 2 GB de swap înseamnă 2 GB mai puțin pentru date.
- Pe discurile de 20–30 GB (Basic XS, Standard S și familia CPU) nu depășiți 1 GB. La familiile CPU (30 GB) și High-Frequency Compute (50 GB), discul rămâne același și după upgrade.
- Excludeți
/swapfiledin copiile de rezervă: conținutul lui nu mai are valoare după repornire. - Dacă discul se umple, micșorați sau eliminați swap-ul și urmați Discul serverului este plin.
Eliminați swap-ul
Verificați memoria.
availablelaMem:trebuie să fie mai mare decâtusedlaSwap:, altfel datele din swap nu au unde să fie mutate:free -hDezactivați swap-ul. Dacă swap-ul conține multe date, comanda poate dura câteva minute:
swapoff /swapfileȘtergeți linia din
/etc/fstab. Comanda păstrează o copie a fișierului în/etc/fstab.bak:sed -i.bak '/^\/swapfile /d' /etc/fstabVerificați că linia a dispărut (prima comandă nu trebuie să afișeze nimic) și reîncărcați configurația:
grep swapfile /etc/fstab systemctl daemon-reloadȘtergeți fișierul:
rm /swapfileDacă ați setat swappiness, ștergeți și fișierul acestuia. Valoarea implicită revine la următoarea repornire:
rm /etc/sysctl.d/99-swappiness.conf
Mesaje de eroare frecvente
| Mesaj | Ce înseamnă | Ce faceți |
|---|---|---|
fallocate: fallocate failed: Operation not supported |
Sistemul de fișiere nu acceptă fallocate. |
Creați fișierul cu dd. |
swapon: /swapfile: skipping - it appears to have holes. sau swapon: /swapfile: swapon failed: Invalid argument |
Fișierul nu este scris complet pe disc sau sistemul de fișiere nu acceptă un fișier creat cu fallocate. |
Ștergeți-l și creați-l cu dd. |
swapon: /swapfile: insecure permissions 0644, 0600 suggested. |
Fișierul poate fi citit și de alți utilizatori. | Rulați chmod 600 /swapfile. |
swapon: /swapfile: swapon failed: Device or resource busy |
Swap-ul este deja activ. | Verificați cu swapon --show. Nu mai trebuie făcut nimic. |
No space left on device (la fallocate sau dd) |
Pe disc nu este destul spațiu liber. | Alegeți o mărime mai mică sau eliberați spațiu. |
swapoff: /swapfile: swapoff failed: Cannot allocate memory |
RAM-ul liber nu ajunge pentru datele din swap. | Opriți temporar aplicațiile mari și reîncercați. Altfel, ștergeți linia din /etc/fstab, reporniți serverul și apoi ștergeți fișierul. |
Întrebări frecvente
Ce mărime de swap să aleg? 1 GB pe discurile de 20–30 GB și 2 GB pe celelalte servere cu 1–2 GB RAM. Mai mult swap rareori ajută: dacă serverul are nevoie de mai multă memorie, alegeți un plan cu mai mult RAM.
Cum schimb mărimea swap-ului?
Dezactivați swap-ul, ștergeți fișierul și creați-l din nou cu noua mărime (în exemplu, 1 GB). Pe AlmaLinux și CentOS Stream rulați și restorecon -v /swapfile înainte de swapon. Linia din /etc/fstab rămâne aceeași.
swapoff /swapfile
rm /swapfile
fallocate -l 1G /swapfile
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfileSwap-ul încetinește serverul? Nu, cât timp este folosit rar. Încetinirea apare când serverul mută date în swap tot timpul. Atunci aveți nevoie de mai mult RAM, nu de mai mult swap.