Câți utilizatori simultani suportă un VPS: cum faceți calculul

Totul începe cu o întrebare: ce fac acești utilizatori? O mie de persoane conectate la o aplicație nu fac o mie de cereri pe secundă, iar o pagină servită din cache costă de o sută de ori mai puțin decât o pagină calculată. Acest ghid transformă utilizatorii în cereri, cererile în procesor și memorie, apoi arată cum verificați totul printr-un test de încărcare.

Publicat la 26 octombrie 2026 Autor: Timp de citire: 9 minute

Toate ghidurile

Esențialul

  1. Utilizatorii conectați nu sunt cereri simultane: un utilizator activ trimite o cerere cam o dată la 10 până la 30 de secunde.
  2. Cereri în curs = cereri pe secundă × durata unei cereri (legea lui Little). Acesta este numărul pe care serverul trebuie să îl susțină.
  3. Un vCPU servește cel mult 1.000 ÷ (milisecunde de calcul pe cerere) cereri pe secundă: la 20 ms de calcul, 50 de cereri pe secundă.
  4. Memoria limitează numărul de workeri: fiecare proces PHP sau Python ocupă între 40 și 200 MB.
  5. Cache-ul schimbă totul: o pagină servită din cache costă mai puțin de o milisecundă, o pagină WordPress calculată între 100 și 300.
  6. Măsurați printr-un test de încărcare (k6, wrk) pe o copie a aplicației, crescând încărcarea pe trepte.

De la utilizatori la cereri

„Utilizatori simultani” desemnează trei mărimi diferite, după cine vorbește:

Se trece de la una la alta prin legea lui Little: numărul de cereri în curs este egal cu debitul, în cereri pe secundă, înmulțit cu durata medie a unei cereri.

Exemplu. 600 de utilizatori activi în același timp, care declanșează fiecare câte o cerere la fiecare 20 de secunde, produc 30 de cereri pe secundă. Dacă fiecare cerere durează 100 ms, serverul are în medie doar 3 cereri în curs. Miza este în altă parte: în vârfuri și în cererile lente.

Cât susține un vCPU

O cerere ocupă procesorul pe durata calculului său: executarea codului, interogarea bazei de date, construirea răspunsului. Un vCPU procesează deci cel mult 1.000 ÷ t cereri pe secundă, unde t este timpul de calcul al unei cereri, în milisecunde. Timpul petrecut în așteptare (un API extern, un disc) nu ocupă procesorul, dar ocupă un worker.

Tipul cereriiTimp de calcul tipicPe vCPU, ordin de mărime
Fișier static sau pagină servită din cacheSub 1 msCâteva mii de cereri pe secundă
Pagină WordPress servită de un cache de paginiÎntre 1 și 5 msCâteva sute pe secundă
API JSON (Node.js, Go, FastAPI) cu o interogare SQL indexatăÎntre 5 și 20 msÎntre 50 și 200 pe secundă
Pagină WordPress sau Laravel calculată la fiecare vizităÎntre 100 și 300 msÎntre 3 și 10 pe secundă
Raport, export, generare de PDFDe la 500 ms la câteva secundeSub 2 pe secundă

Cu aceste ordine de mărime, 30 de cereri API pe secundă la 10 ms de calcul ocupă 30% dintr-un singur vCPU. Aceleași 30 de cereri pe secundă pe pagini WordPress fără cache cer între 3 și 9 vCPU. Cache-ul de pagini servește tocmai la mutarea unei pagini de pe al patrulea rând al tabelului pe al doilea.

Cât susține memoria

Fiecare cerere în curs este preluată de un worker, iar workerii ocupă memorie, fie că lucrează, fie că nu. Adesea memoria, mai mult decât procesorul, stabilește numărul de cereri procesate în paralel:

Conexiunile persistente (websocketuri, notificări în timp real) se socotesc separat: deschise permanent, ele ocupă puțin procesor și câteva zeci de kiloocteți de memorie fiecare. Un server Node.js ține mii de astfel de conexiuni în câteva sute de MB.

Adevăratele blocaje

Într-o aplicație reală, serverul se saturează rareori acolo unde vă așteptați. Cauzele cele mai frecvente, în ordinea în care merită căutate:

  1. O interogare SQL lentă: un index lipsă transformă o interogare de 2 ms într-una de 2 secunde, care reține un worker și o conexiune. pg_stat_statements pe PostgreSQL sau jurnalul interogărilor lente din MySQL o identifică.
  2. Interogările în cascadă (problema N+1): o pagină care lansează o interogare pentru fiecare rând afișat lansează sute.
  3. Un apel extern sincron: un API de plăți sau de AI care răspunde în 3 secunde blochează un worker sincron timp de 3 secunde.
  4. Procesări grele în interiorul cererii: trimiterea de e-mailuri, redimensionarea imaginilor, generarea de PDF-uri, care se mută într-o coadă de sarcini.
  5. Lipsa cache-ului: paginile identice pentru toți vizitatorii se servesc dintr-un cache, fișierele statice direct de serverul web.

Verificarea: testul de încărcare

Ordinele de mărime dau o primă dimensiune; un test de încărcare o dă pe cea reală. Principiul: simulați tot mai mulți utilizatori pe o copie a aplicației și notați momentul în care timpul de răspuns se degradează brusc.

Terminal: 50 de conexiuni timp de 30 de secunde, cu wrk
wrk -t2 -c50 -d30s --latency https://preprod.site-ul-dumneavoastra.com/

Pentru un parcurs complet (autentificare, navigare, căutare), k6 descrie un scenariu în JavaScript și crește încărcarea pe trepte:

Script k6 (test.js), lansat cu: k6 run test.js
import http from 'k6/http';
import { sleep } from 'k6';

export const options = {
  stages: [
    { duration: '2m', target: 100 },
    { duration: '5m', target: 100 },
    { duration: '2m', target: 300 },
    { duration: '5m', target: 300 },
    { duration: '2m', target: 0 },
  ],
  thresholds: { http_req_duration: ['p(95)<500'] },
};

export default function () {
  http.get('https://preprod.site-ul-dumneavoastra.com/');
  sleep(15);
}

Când încărcarea crește

Ordinea care costă cel mai puțin și aduce cel mai mult:

  1. Puneți în cache tot ce se poate (pagini, fragmente, rezultate de interogări) și corectați interogările lente.
  2. Reglați numărul de workeri după memoria și procesorul disponibile.
  3. Treceți la o dimensiune superioară: mai multe vCPU și mai multă memorie, fără nicio schimbare în aplicație.
  4. Mutați baza de date pe propriul ei server.
  5. Distribuiți aplicația pe mai multe servere, în spatele unui echilibrator de încărcare (load balancer).

Primele trei etape acoperă marea majoritate a aplicațiilor de gestiune, a site-urilor și a API-urilor: câteva sute de utilizatori activi în același timp încap pe un singur server bine reglat.

Un server care crește odată cu utilizatorii dumneavoastră

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ă: spuneți-ne câți utilizatori așteptați la lansare și peste un an, și vă recomandăm dimensiunea; iar când o pagină încetinește, punem diagnosticul și vă indicăm ce aveți de făcut, de la sistem până la codul aplicației dumneavoastră.

Descoperiți gama VPS Pro

Întrebări frecvente

Câți utilizatori poate susține un VPS cu 2 vCPU și 4 GB?

Pentru un API sau o aplicație ale cărei cereri iau între 10 și 20 ms de calcul, câteva sute de utilizatori activi în același timp. Pentru un site WordPress fără cache de pagini, în jur de o sută. Diferența ține de timpul de calcul al fiecărei cereri și de cache, de unde utilitatea unui test de încărcare.

Câți vizitatori pe zi poate primi un VPS?

Numărul de vizitatori pe zi spune puțin: ceea ce contează este vârful. Pentru a trece de la unul la celălalt, împărțiți vizitele zilei la orele de activitate, înmulțiți cu numărul de pagini vizualizate pe vizită, apoi cu un factor de vârf între 3 și 5. 10.000 de vizite în 10 ore, cu câte 4 pagini fiecare, dau aproximativ 1 pagină pe secundă în medie și între 3 și 5 la vârf.

Cum îmi dau seama dacă serverul meu este saturat?

Trei semne: timpul de răspuns crește odată cu traficul, procesorul rămâne peste 80% la orele de vârf sau memoria disponibilă scade aproape de zero. Jurnalele serverului web arată atunci erori 502 sau 504, iar cererile așteaptă un worker liber.

Websocketurile schimbă calculul?

Da: o conexiune websocket rămâne deschisă permanent. Ea consumă puțin procesor și câteva zeci de kiloocteți de memorie. Un server Node.js ține mii de astfel de conexiuni; mesajele trimise, mai mult decât conexiunile deschise, încarcă procesorul.

Contactați-ne