Hány egyidejű felhasználót bír el egy VPS: a számítás elvégzése

Minden egy kérdéssel kezdődik: mit csinálnak ezek a felhasználók? Egy alkalmazásba bejelentkezett ezer ember nem küld ezer kérést másodpercenként, és egy gyorsítótárból kiszolgált oldal százszor kevesebbe kerül, mint egy minden alkalommal újra előállított oldal. Ez az útmutató a felhasználókat kérésekre, a kéréseket processzorra és memóriára váltja át, majd megmutatja, hogyan ellenőrizze mindezt terheléses teszttel.

Közzétéve 2026. október 26-án Szerző: Olvasási idő: 9 perc

Minden útmutató

A lényeg röviden

  1. A bejelentkezett felhasználók nem egyidejű kérések: egy aktív felhasználó nagyjából 10 és 30 másodperc közötti időközönként küld egy kérést.
  2. Folyamatban lévő kérések = kérések másodpercenként × egy kérés időtartama (Little törvénye). Ezt a számot kell a szervernek bírnia.
  3. Egy vCPU legfeljebb 1000 ÷ (egy kérés számítási ideje ezredmásodpercben) kérést szolgál ki másodpercenként: 20 ms számítás, 50 kérés másodpercenként.
  4. A memória szab határt a workerek számának: minden PHP- vagy Python-folyamat 40 és 200 MB között foglal.
  5. A gyorsítótár mindent megváltoztat: egy gyorsítótárból kiszolgált oldal kevesebb mint egy ezredmásodpercbe kerül, egy minden alkalommal előállított WordPress-oldal 100 és 300 ezredmásodperc közé.
  6. Mérjen terheléses teszttel (k6, wrk) az alkalmazás egy másolatán, fokozatosan emelve a terhelést.

A felhasználóktól a kérésekig

Az „egyidejű felhasználók” három különböző mennyiséget jelent attól függően, ki beszél:

Az egyikről a másikra Little törvénye segítségével lehet áttérni: a folyamatban lévő kérések száma egyenlő az átbocsátással (kérés másodpercenként) szorozva egy kérés átlagos időtartamával.

Példa. 600 egyszerre aktív felhasználó, akik mindegyike 20 másodpercenként indít egy kérést, másodpercenként 30 kérést jelent. Ha minden kérés 100 ms-ig tart, a szerveren átlagosan csak 3 kérés van folyamatban. A tét máshol van: a csúcsokban és a lassú kérésekben.

Mennyit bír egy vCPU

Egy kérés a számítás idejére foglalja a processzort: a kód futtatása, az adatbázis lekérdezése, a válasz összeállítása. Egy vCPU így legfeljebb 1000 ÷ t kérést dolgoz fel másodpercenként, ahol t egy kérés számítási ideje ezredmásodpercben. A várakozással töltött idő (egy külső API-ra, a lemezre) nem foglalja a processzort, de egy workert igen.

A kérés típusaJellemző számítási idővCPU-nként, nagyságrendileg
Statikus fájl vagy gyorsítótárból kiszolgált oldalKevesebb mint 1 msTöbb ezer kérés másodpercenként
Oldalgyorsítótárból kiszolgált WordPress-oldal1 és 5 ms közöttTöbb száz másodpercenként
JSON API (Node.js, Go, FastAPI) indexelt SQL-lekérdezéssel5 és 20 ms között50 és 200 között másodpercenként
Minden látogatáskor előállított WordPress- vagy Laravel-oldal100 és 300 ms között3 és 10 között másodpercenként
Jelentés, exportálás, PDF-generálás500 ms és több másodperc közöttKevesebb mint 2 másodpercenként

Ezekkel a nagyságrendekkel másodpercenként 30 API-kérés 10 ms számítási idővel egyetlen vCPU 30%-át foglalja le. Ugyanez a másodpercenkénti 30 kérés gyorsítótár nélküli WordPress-oldalakon 3 és 9 közötti vCPU-t igényel. Az oldalgyorsítótár éppen arra szolgál, hogy egy oldalt a táblázat negyedik sorából a második sorába vigyen át.

Mennyit bír a memória

Minden folyamatban lévő kérést egy worker kezel, a workerek pedig memóriát foglalnak, akár dolgoznak, akár nem. Gyakran a memória, és nem a processzor határozza meg a párhuzamosan feldolgozott kérések számát:

Az állandó kapcsolatokat (websocketek, valós idejű értesítések) külön kell számolni: folyamatosan nyitva vannak, kevés processzort és egyenként néhány tíz kilobájt memóriát foglalnak. Egy Node.js-szerver több ezret is elbír belőlük néhány száz MB-ban.

A valódi szűk keresztmetszetek

Egy valós alkalmazásban a szerver ritkán ott telítődik, ahol várnánk. A leggyakoribb okok, abban a sorrendben, ahogyan keresni érdemes őket:

  1. Egy lassú SQL-lekérdezés: egy hiányzó index egy 2 ms-os lekérdezést 2 másodperces lekérdezéssé alakít, amely lefoglal egy workert és egy kapcsolatot. PostgreSQL-en a pg_stat_statements, MySQL-en a lassú lekérdezések naplója mutat rá.
  2. A lépcsőzetes lekérdezések (az N+1 probléma): egy oldal, amely minden megjelenített sorhoz külön lekérdezést indít, több százat indít.
  3. Egy szinkron külső hívás: egy 3 másodperc alatt válaszoló fizetési API vagy MI-szolgáltatás 3 másodpercre blokkol egy szinkron workert.
  4. Nehéz feldolgozás a kérésen belül: e-mail-küldés, képek átméretezése, PDF-generálás, amelyeket feladatsorba érdemes áthelyezni.
  5. A gyorsítótár hiánya: a minden látogató számára azonos oldalakat gyorsítótárból, a statikus fájlokat a webszerverről érdemes kiszolgálni.

Az ellenőrzés: a terheléses teszt

A nagyságrendek egy első méretet adnak; a terheléses teszt a valódit. Az elv: egyre több felhasználót szimulálni az alkalmazás egy másolatán, és feljegyezni azt a pontot, ahol a válaszidő hirtelen megugrik.

Terminál: 50 kapcsolat 30 másodpercig, a wrk eszközzel
wrk -t2 -c50 -d30s --latency https://staging.sajat-webhely.com/

Egy teljes felhasználói útvonalhoz (bejelentkezés, böngészés, keresés) a k6 JavaScriptben ír le egy forgatókönyvet, és fokozatosan emeli a terhelést:

k6-szkript (test.js), indítás: 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://staging.sajat-webhely.com/');
  sleep(15);
}

Amikor nő a terhelés

A sorrend, amely a legkevesebbe kerül és a legtöbbet hozza:

  1. Gyorsítótárazza, amit lehet (oldalak, oldalrészletek, lekérdezések eredményei), és javítsa a lassú lekérdezéseket.
  2. Hangolja a workerek számát a rendelkezésre álló memóriához és processzorhoz.
  3. Váltson nagyobb méretre: több vCPU és memória, az alkalmazás módosítása nélkül.
  4. Helyezze az adatbázist saját szerverre.
  5. Ossza el az alkalmazást több szerver között egy terheléselosztó mögött.

Az első három lépés lefedi az ügyviteli alkalmazások, weboldalak és API-k túlnyomó többségét: több száz egyszerre aktív felhasználó elfér egyetlen jól hangolt szerveren.

Egy szerver, amely a felhasználóival együtt nő

A VPS Pro hat méretben érhető el, Intel Xeon processzorokon, ECC memóriával és tükrözött NVMe SSD-kkel, és bármikor nagyobb méretre válthat, újratelepítés nélkül. A Teljes körű támogatás a csomag része: mondja el, hány felhasználót vár induláskor és egy év múlva, mi javasoljuk a méretet; és amikor egy oldal lelassul, diagnosztizálunk, és megmondjuk, mit tegyen, a rendszertől egészen az alkalmazása kódjáig.

Tovább a VPS Pro oldalára

Gyakori kérdések

Hány felhasználót bír el egy 2 vCPU-s, 4 GB-os VPS?

Egy olyan API vagy alkalmazás esetén, amelynek kérései 10 és 20 ms közötti számítási időt igényelnek, több száz egyszerre aktív felhasználót. Egy oldalgyorsítótár nélküli WordPress-oldal esetén nagyjából százat. A különbség az egyes kérések számítási idejéből és a gyorsítótárból adódik, ezért érdemes terheléses tesztet végezni.

Hány látogatót fogadhat naponta egy VPS?

A napi látogatók száma önmagában keveset mond: a csúcs számít. Az átváltáshoz ossza el a napi látogatásokat az aktív órák számával, szorozza meg a látogatásonkénti oldalmegtekintésekkel, majd egy 3 és 5 közötti csúcstényezővel. 10 000 látogatás 10 óra alatt, egyenként 4 oldallal, átlagosan nagyjából 1 oldalt jelent másodpercenként, a csúcsban pedig 3 és 5 között.

Honnan tudhatom, hogy telítődik-e a szerverem?

Három jel: a válaszidő a forgalommal együtt nő, a processzor csúcsidőben 80% felett marad, vagy a rendelkezésre álló memória nulla közelébe esik. A webszerver naplói ilyenkor 502-es vagy 504-es hibákat mutatnak, a kérések pedig szabad workerre várnak.

Megváltoztatják a websocketek a számítást?

Igen: egy websocket-kapcsolat folyamatosan nyitva marad. Kevés processzort és néhány tíz kilobájt memóriát fogyaszt. Egy Node.js-szerver több ezret is elbír belőlük; a processzort inkább az elküldött üzenetek terhelik, mint a nyitott kapcsolatok.

Kapcsolatfelvétel