Memoria este resursa care stabilește cel mai des dimensiunea unui server: ea se termină prima, iar când se termină, serverul nu încetinește, ci oprește servicii. Acest ghid prezintă regula de calcul, ce consumă fiecare componentă a unei aplicații, profiluri tipice și modul de măsurare pe un server care rulează deja.
available din free -h, nu coloana free.Un server nu consumă memorie „în general”: fiecare program care rulează își păstrează o parte din ea, cât timp rulează. Calculul pornește deci de la lista proceselor prezente permanent, apoi adaugă vârful și o marjă:
Memorie necesară = (sistem + servicii permanente + vârful sarcinilor ocazionale) × 1,25
Ordinele de mărime de mai jos sunt valabile pentru o aplicație de dimensiune obișnuită, măsurată în producție. Ele oferă un punct de plecare; măsurarea pe propria aplicație, descrisă mai jos, are întotdeauna ultimul cuvânt.
| Componentă | Memorie tipică | Ce o face să varieze |
|---|---|---|
| Nginx, Caddy (server web, proxy) | Între 10 și 50 MB | Aproape fixă: numărul de conexiuni contează puțin. |
| PHP-FPM (WordPress, Laravel, Symfony) | Între 40 și 80 MB per proces | Numărul de procese, plafonat de pm.max_children: 10 procese înseamnă între 400 și 800 MB. |
| Node.js (API, Next.js, NestJS) | Între 60 și 300 MB per proces | Numărul de procese (modul cluster, PM2) și dimensiunea heap-ului, limitată de --max-old-space-size. |
| Python (Django, FastAPI, Flask) | Între 80 și 200 MB per proces | Numărul de workeri Gunicorn sau Uvicorn și bibliotecile încărcate: pandas sau un model de învățare automată adaugă sute de MB. |
| Java (Spring Boot) | Între 300 MB și 1 GB per aplicație | Dimensiunea maximă a heap-ului: implicit, JVM își alocă un sfert din memoria pe care o vede. |
| Go, Rust | Între 10 și 100 MB | Datele pe care aplicația le păstrează ea însăși în memorie. |
| PostgreSQL | 25% din memorie pentru shared_buffers, plus câțiva MB per conexiune | Volumul de date consultate des, numărul de conexiuni, work_mem. |
| MySQL, MariaDB | innodb_buffer_pool_size, implicit 128 MB | Pe un server dedicat bazei de date, acest buffer ocupă frecvent până la 80% din memorie. |
| Redis | Dimensiunea datelor, plus structurile sale | În timpul unei salvări pe disc, paginile modificate sunt duplicate: până la dublu în cel mai rău caz. |
| Elasticsearch, OpenSearch | Cel puțin 2 GB pentru heap | Heap-ul nu depășește jumătate din memorie: restul servește drept cache pentru fișiere. |
Un vârf revine des la aplicațiile JavaScript: compilarea. npm run build pe un proiect Next.js, Nuxt sau Angular cere frecvent între 1 și 2 GB doar pentru el, timp de câteva minute, pe lângă ce rulează deja. A compila pe server înseamnă a dimensiona pentru acest vârf; a compila pe calculatorul dumneavoastră sau în integrarea continuă și a depune doar rezultatul înseamnă a-l evita.
Același raționament este valabil pentru containerele Docker: fiecare container este un ansamblu de procese ca oricare altele, iar daemonul Docker își adaugă propriul consum. docker stats afișează cât ia fiecare.
Aceste profiluri adună componentele de mai sus, cu vârf și marjă incluse. Ele presupun o aplicație de dimensiune obișnuită și traficul unei lansări; o bază de date voluminoasă sau un trafic susținut mută cursorul în sus.
| Ce rulează pe server | Memorie necesară |
|---|---|
| Site static, proxy, bot mic sau script programat | Între 1 și 2 GB |
| Un site WordPress cu MariaDB și un cache de pagini | 2 GB |
| Un magazin WooCommerce sau mai multe site-uri WordPress | 4 GB |
| Un API Node.js sau Python cu PostgreSQL, primii utilizatori | 4 GB |
| O aplicație Next.js compilată pe server, cu API-ul și baza ei PostgreSQL | Între 6 și 8 GB |
| Mai multe aplicații în containere, preproducție și producție | 8 GB |
| O bază de date de câteva zeci de GB, consultată intensiv | 16 GB și peste |
| Un model de limbaj cu 7 până la 8 miliarde de parametri, rulat pe server | 16 GB |
O aplicație care apelează un model AI prin API (OpenAI, Anthropic, Mistral) se dimensionează ca orice aplicație web: modelul rulează la furnizorul său, iar serverul dumneavoastră îi așteaptă răspunsul. Rularea modelului pe serverul însuși este cea care schimbă ordinul de mărime.
Pe un server în funcțiune, măsurarea înlocuiește estimarea. Trei comenzi arată unde vă aflați:
free -h
ps aux --sort=-rss | head -n 15
vmstat 5 5
free -h: citiți coloana available, memoria disponibilă efectiv pentru a lansa programe noi. Coloana free este aproape mereu mică, și este normal: Linux umple memoria nefolosită cu cache-ul fișierelor (buff/cache), pe care îl eliberează imediat ce un program are nevoie de el.ps aux --sort=-rss: procesele ordonate după memoria ocupată (coloana RSS, în kiloocteți). Aici vedeți cât cântărește fiecare worker PHP sau Node.js.vmstat 5 5: cinci citiri la interval de cinci secunde. Valorile nenule din coloanele si și so, citire după citire, semnalează un server care face schimb cu swap-ul: îi lipsește memoria.Măsurați în momentul cel mai încărcat al zilei și în timpul sarcinilor ocazionale: compilare, backup, import. Vârful este cel care contează.
Un server rămas fără memorie nu încetinește treptat. Când nu mai are nimic de eliberat, nucleul Linux declanșează OOM killer (out of memory): alege un proces, în general pe cel care ocupă cea mai multă memorie, și îl oprește brusc. Pe un server de aplicații, acesta este adesea baza de date.
Simptomele: erori 502 sau 503 din când în când, un serviciu care repornește fără motiv aparent, o compilare care se întrerupe cu mesajul Killed. Jurnalele confirmă:
journalctl -k | grep -i "out of memory"
systemctl status numele-serviciului
În rezultatul comenzii systemctl status, mențiunea Failed with result 'oom-kill' desemnează un serviciu oprit din lipsă de memorie.
Swap-ul, când serverul dispune de el, amână acest moment mutând pe disc memoria cel mai puțin folosită. Este o plasă de siguranță, nu o capacitate: un server care se sprijină continuu pe swap răspunde de câteva ori mai lent, chiar și pe un SSD NVMe.
Remediile, de la cel mai simplu la cel mai durabil: reduceți numărul de procese ale aplicației (pm.max_children, workerii Gunicorn), compilați în afara serverului, limitați memoria bazei de date, apoi treceți la o dimensiune superioară.
Memoria nu este singura resursă: procesorul contează pentru ce calculează (compilare, procesare de imagini, rularea unui model AI), discul pentru baza de date și fișiere. Pentru o aplicație web însă, memoria este aproape întotdeauna cea care stabilește dimensiunea.
VPS Pro este disponibil în șase dimensiuni, pe procesoare Intel Xeon, memorie ECC și SSD NVMe în oglindă, și trece la dimensiunea superioară oricând, fără reinstalare. Asistența integrală este inclusă: descrieți-ne ce va rula serverul dumneavoastră și vă recomandăm dimensiunea, apoi, la fiecare întrebare, punem diagnosticul și vă indicăm ce aveți de făcut, de la sistem până la codul aplicației dumneavoastră.
Unui site static, unui proxy sau unui script mic le ajung între 1 și 2 GB. De îndată ce o bază de date și o aplicație (PHP, Node.js, Python) împart serverul, socotiți 2 GB pentru un site WordPress și 4 GB pentru o aplicație la comandă cu PostgreSQL.
2 GB pentru un site cu MariaDB și un cache de pagini, 4 GB pentru un magazin WooCommerce sau mai multe site-uri. Numărul de procese PHP-FPM este prima setare de reglat: fiecare ocupă între 40 și 80 MB.
Nu. Swap-ul evită o oprire bruscă atunci când memoria este plină, dar un server care îl folosește continuu răspunde de câteva ori mai lent, chiar și pe un SSD NVMe. Este o plasă de siguranță; dimensiunea se alege după memorie.
Pentru că Linux folosește memoria nefolosită drept cache pentru fișiere. Acest cache se eliberează imediat ce un program are nevoie de memorie. Coloana de citit este available, care arată memoria disponibilă efectiv.
Socotiți între 1 și 2 GB doar pentru compilare, pe lângă ce rulează deja pe server. Compilarea pe calculatorul dumneavoastră sau în integrarea continuă, urmată de depunerea doar a rezultatului, evită acest vârf.
Simafri
Să discutăm despre site-ul dumneavoastră
Povestiți-ne despre proiectul dumneavoastră în câteva cuvinte: vă vom răspunde rapid.
Mulțumim! Cererea dumneavoastră a fost trimisă. Vă vom răspunde în curând.
Preferați e-mailul? Scrieți-ne la support@simafri.com.