Kiek vartotojų vienu metu atlaiko VPS: kaip tai apskaičiuoti

Viskas prasideda nuo klausimo: ką daro tie vartotojai? Tūkstantis prie programos prisijungusių žmonių nesiunčia tūkstančio užklausų per sekundę, o iš podėlio pateiktas puslapis pareikalauja šimtą kartų mažiau išteklių nei sugeneruotas. Šis gidas vartotojus paverčia užklausomis, užklausas procesoriumi ir atmintimi, tada parodo, kaip tai patikrinti apkrovos testu.

Paskelbta 2026 m. spalio 26 d. Autorius: Skaitymo trukmė: 9 min.

Visi gidai

Svarbiausia

  1. Prisijungę vartotojai nėra vienalaikės užklausos: tarp dviejų aktyvaus vartotojo užklausų paprastai praeina nuo 10 iki 30 sekundžių.
  2. Vykdomos užklausos = užklausos per sekundę × vienos užklausos trukmė (Little dėsnis). Būtent šį skaičių turi atlaikyti serveris.
  3. Vienas vCPU aptarnauja ne daugiau kaip 1 000 ÷ (vienos užklausos skaičiavimo milisekundės) užklausų per sekundę: 20 ms skaičiavimo, 50 užklausų per sekundę.
  4. Atmintis riboja darbinių procesų skaičių: kiekvienas PHP ar Python procesas užima nuo 40 iki 200 MB.
  5. Podėlis keičia viską: iš podėlio pateiktam puslapiui reikia mažiau nei milisekundės, sugeneruotam WordPress puslapiui nuo 100 iki 300.
  6. Matuokite apkrovos testu (k6, wrk) programos kopijoje, didindami apkrovą pakopomis.

Nuo vartotojų prie užklausų

„Vienu metu prisijungę vartotojai“ reiškia tris skirtingus dydžius, priklausomai nuo to, kas kalba:

Iš vieno dydžio į kitą pereinama pagal Little dėsnį: vykdomų užklausų skaičius lygus srautui, išreikštam užklausomis per sekundę, padaugintam iš vidutinės užklausos trukmės.

Pavyzdys. 600 vienu metu aktyvių vartotojų, kurių kiekvienas užklausą siunčia kas 20 sekundžių, sudaro 30 užklausų per sekundę. Jei kiekviena užklausa trunka 100 ms, serveris vidutiniškai vienu metu apdoroja tik 3 užklausas. Tikrasis iššūkis slypi kitur: pikuose ir lėtose užklausose.

Ką atlaiko vienas vCPU

Užklausa užima procesorių tol, kol skaičiuojama: vykdomas kodas, užklausiama duomenų bazė, kuriamas atsakymas. Todėl vienas vCPU apdoroja ne daugiau kaip 1 000 ÷ t užklausų per sekundę, kur t yra vienos užklausos skaičiavimo laikas milisekundėmis. Laukimo laikas (išorinė API, diskas) procesoriaus neužima, bet užima darbinį procesą.

Užklausos tipasTipinis skaičiavimo laikasVienam vCPU, orientaciškai
Statinis failas arba iš podėlio pateiktas puslapisMažiau nei 1 msKeli tūkstančiai užklausų per sekundę
WordPress puslapis, pateiktas iš puslapių podėlionuo 1 iki 5 msKeli šimtai per sekundę
JSON API (Node.js, Go, FastAPI) su indeksuota SQL užklausanuo 5 iki 20 msnuo 50 iki 200 per sekundę
WordPress ar Laravel puslapis, generuojamas per kiekvieną apsilankymąnuo 100 iki 300 msnuo 3 iki 10 per sekundę
Ataskaita, eksportas, PDF generavimasnuo 500 ms iki kelių sekundžiųMažiau nei 2 per sekundę

Pagal šiuos dydžius 30 API užklausų per sekundę po 10 ms skaičiavimo užima 30 % vieno vCPU. Tos pačios 30 užklausų per sekundę WordPress puslapiams be podėlio reikalauja nuo 3 iki 9 vCPU. Puslapių podėlis kaip tik ir skirtas tam, kad puslapis iš ketvirtos lentelės eilutės pereitų į antrą.

Ką atlaiko atmintis

Kiekvieną vykdomą užklausą apdoroja darbinis procesas, o darbiniai procesai užima atmintį, nesvarbu, dirba jie ar ne. Dažnai būtent atmintis, labiau nei procesorius, lemia, kiek užklausų apdorojama lygiagrečiai:

Nuolatinės jungtys (websockets, realiojo laiko pranešimai) skaičiuojamos atskirai: nuolat atviros, jos užima mažai procesoriaus ir po kelias dešimtis kilobaitų atminties. Node.js serveris jų išlaiko tūkstančius per kelis šimtus MB.

Tikrosios siaurosios vietos

Realioje programoje serveris retai perkraunamas ten, kur to tikimasi. Dažniausios priežastys, ta tvarka, kuria verta jų ieškoti:

  1. Lėta SQL užklausa: trūkstamas indeksas 2 ms užklausą paverčia 2 sekundžių užklausa, kuri užlaiko darbinį procesą ir jungtį. PostgreSQL pg_stat_statements arba MySQL lėtų užklausų žurnalas ją parodo.
  2. Užklausų kaskados (N+1 problema): puslapis, kuris kiekvienai rodomai eilutei paleidžia po užklausą, jų paleidžia šimtus.
  3. Sinchroninis išorinis iškvietimas: mokėjimų ar DI API, atsakanti per 3 sekundes, 3 sekundėms užblokuoja sinchroninį darbinį procesą.
  4. Sunkūs procesai užklausos viduje: el. laiškų siuntimas, vaizdų dydžio keitimas, PDF generavimas, kuriuos verta perkelti į užduočių eilę.
  5. Podėlio nebuvimas: visiems lankytojams vienodi puslapiai pateikiami iš podėlio, statiniai failai iš žiniatinklio serverio.

Patikrinti: apkrovos testas

Orientaciniai dydžiai duoda pirmąjį dydį; apkrovos testas duoda tikrąjį. Principas: programos kopijoje imituoti vis daugiau vartotojų ir užfiksuoti momentą, kai atsako laikas staiga pablogėja.

Terminalas: 50 jungčių 30 sekundžių, su wrk
wrk -t2 -c50 -d30s --latency https://testavimas.jusu-svetaine.com/

Visam naudojimo scenarijui (prisijungimas, naršymas, paieška) k6 aprašo scenarijų JavaScript kalba ir didina apkrovą pakopomis:

k6 scenarijus (test.js), paleidžiamas komanda: 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://testavimas.jusu-svetaine.com/');
  sleep(15);
}

Kai apkrova auga

Tvarka, kuri reikalauja mažiausiai pastangų ir duoda daugiausia naudos:

  1. Įdėti į podėlį tai, ką galima (puslapius, fragmentus, užklausų rezultatus), ir pataisyti lėtas užklausas.
  2. Darbinių procesų skaičių suderinti su turima atmintimi ir procesoriumi.
  3. Pereiti prie didesnio dydžio: daugiau vCPU ir atminties, nieko nekeičiant programoje.
  4. Duomenų bazę perkelti į atskirą serverį.
  5. Programą paskirstyti keliems serveriams už apkrovos balansavimo įrenginio.

Pirmieji trys žingsniai tinka didžiajai daugumai verslo valdymo programų, svetainių ir API: keli šimtai vienu metu aktyvių vartotojų telpa viename gerai sureguliuotame serveryje.

Serveris, augantis kartu su jūsų vartotojais

VPS Pro siūlomas šešių dydžių, su Intel Xeon procesoriais, ECC atmintimi ir veidrodiniais NVMe SSD, ir bet kada pereina prie didesnio dydžio, be pakartotinio diegimo. Visapusiška pagalba įskaičiuota: pasakykite, kiek vartotojų tikitės paleidimo metu ir po metų, ir mes patarsime dydį; o kai puslapis sulėtėja, diagnozuojame ir nurodome, ką daryti, nuo sistemos iki jūsų programos kodo.

Žiūrėti VPS Pro

Dažni klausimai

Kiek vartotojų atlaiko VPS su 2 vCPU ir 4 GB?

API ar programai, kurios užklausoms reikia nuo 10 iki 20 ms skaičiavimo, keli šimtai vienu metu aktyvių vartotojų. WordPress svetainei be puslapių podėlio apie šimtą. Skirtumą lemia kiekvienos užklausos skaičiavimo laikas ir podėlis, todėl verta atlikti apkrovos testą.

Kiek lankytojų per dieną gali priimti VPS?

Lankytojų per dieną skaičius mažai ką pasako: svarbus pikas. Norėdami pereiti nuo vieno prie kito, dienos apsilankymus padalykite iš aktyvių valandų, padauginkite iš per apsilankymą peržiūrėtų puslapių, tada iš piko koeficiento nuo 3 iki 5. 10 000 apsilankymų per 10 valandų, po 4 puslapius kiekvienas, vidutiniškai duoda apie 1 puslapį per sekundę, o piko metu nuo 3 iki 5.

Kaip sužinoti, ar mano serveris perkrautas?

Trys ženklai: atsako laikas ilgėja didėjant srautui, procesorius piko valandomis išlieka virš 80 % arba prieinama atmintis nukrenta beveik iki nulio. Tada žiniatinklio serverio žurnaluose matyti klaidos 502 ar 504, o užklausos laukia laisvo darbinio proceso.

Ar websockets keičia skaičiavimą?

Taip: websocket jungtis lieka nuolat atvira. Ji vartoja mažai procesoriaus ir kelias dešimtis kilobaitų atminties. Node.js serveris jų išlaiko tūkstančius; procesorių labiau apkrauna siunčiami pranešimai nei atviros jungtys.

Susisiekite su mumis