Hoeveel gelijktijdige gebruikers kan een VPS aan: zo rekent u het uit

Alles begint met één vraag: wat doen die gebruikers? Duizend mensen die zijn ingelogd op een applicatie doen geen duizend verzoeken per seconde, en een pagina uit een cache kost honderd keer minder dan een pagina die telkens opnieuw wordt berekend. Deze gids vertaalt gebruikers naar verzoeken, verzoeken naar processor en geheugen, en laat daarna zien hoe u het controleert met een loadtest.

Gepubliceerd op 26 oktober 2026 Door Leestijd: 9 minuten

Alle gidsen

In het kort

  1. Ingelogde gebruikers zijn geen gelijktijdige verzoeken: een actieve gebruiker stuurt ongeveer elke 10 tot 30 seconden een verzoek.
  2. Lopende verzoeken = verzoeken per seconde × duur van een verzoek (wet van Little). Dat aantal moet de server aankunnen.
  3. Een vCPU verwerkt hooguit 1.000 ÷ (milliseconden rekentijd per verzoek) verzoeken per seconde: 20 ms rekentijd, 50 verzoeken per seconde.
  4. Het geheugen begrenst het aantal workers: elk PHP- of Python-proces neemt 40 tot 200 MB in.
  5. De cache verandert alles: een pagina uit een cache kost minder dan een milliseconde, een berekende WordPress-pagina 100 tot 300.
  6. Meet met een loadtest (k6, wrk) op een kopie van de applicatie, en voer de belasting stap voor stap op.

Van gebruikers naar verzoeken

“Gelijktijdige gebruikers” staat voor drie verschillende grootheden, afhankelijk van wie het zegt:

Van de ene naar de andere gaat u met de wet van Little: het aantal lopende verzoeken is gelijk aan de doorvoer, in verzoeken per seconde, vermenigvuldigd met de gemiddelde duur van een verzoek.

Voorbeeld. 600 gebruikers die tegelijk actief zijn en elk om de 20 seconden een verzoek doen, geven 30 verzoeken per seconde. Duurt elk verzoek 100 ms, dan heeft de server gemiddeld maar 3 lopende verzoeken. De uitdaging ligt elders: in de pieken en in de trage verzoeken.

Wat een vCPU aankan

Een verzoek bezet de processor zolang het rekent: de code uitvoeren, de database bevragen, het antwoord opbouwen. Een vCPU verwerkt dus hooguit 1.000 ÷ t verzoeken per seconde, waarbij t de rekentijd van een verzoek in milliseconden is. De tijd die aan wachten opgaat (op een externe API, op een schijf) bezet de processor niet, maar wel een worker.

Soort verzoekTypische rekentijdPer vCPU, orde van grootte
Statisch bestand, of pagina uit een cacheMinder dan 1 msEnkele duizenden verzoeken per seconde
WordPress-pagina geleverd door een paginacache1 tot 5 msEnkele honderden per seconde
JSON-API (Node.js, Go, FastAPI) met een geïndexeerde SQL-query5 tot 20 ms50 tot 200 per seconde
WordPress- of Laravel-pagina die bij elk bezoek wordt berekend100 tot 300 ms3 tot 10 per seconde
Rapport, export, pdf-generatie500 ms tot enkele secondenMinder dan 2 per seconde

Met deze ordes van grootte bezetten 30 API-verzoeken per seconde met 10 ms rekentijd 30% van één vCPU. Dezelfde 30 verzoeken per seconde op WordPress-pagina’s zonder cache vragen 3 tot 9 vCPU. Een paginacache dient precies om een pagina van de vierde regel van de tabel naar de tweede te brengen.

Wat het geheugen aankan

Elk lopend verzoek wordt afgehandeld door een worker, en workers nemen geheugen in, of ze nu werken of niet. Vaak is het eerder het geheugen dan de processor dat bepaalt hoeveel verzoeken parallel worden verwerkt:

Persistente verbindingen (websockets, realtime meldingen) tellen apart: ze staan permanent open en gebruiken elk weinig processor en enkele tientallen kilobytes geheugen. Een Node.js-server houdt er duizenden vast in enkele honderden MB.

De echte knelpunten

Bij een echte applicatie raakt de server zelden verzadigd waar u het verwacht. De meest voorkomende oorzaken, in de volgorde waarin u ze opspoort:

  1. Een trage SQL-query: een ontbrekende index maakt van een query van 2 ms een query van 2 seconden, die een worker en een verbinding vasthoudt. pg_stat_statements op PostgreSQL, of de slow query log van MySQL, wijst hem aan.
  2. Query’s in cascade (het N+1-probleem): een pagina die één query per getoonde regel uitvoert, voert er honderden uit.
  3. Een synchrone externe aanroep: een betaal- of AI-API die in 3 seconden antwoordt, blokkeert een synchrone worker 3 seconden lang.
  4. Zwaar werk binnen het verzoek: e-mails versturen, afbeeldingen verkleinen, pdf’s genereren, allemaal werk voor een takenwachtrij.
  5. Het ontbreken van een cache: pagina’s die voor alle bezoekers gelijk zijn, horen in een cache, statische bestanden bij de webserver.

Het controleren: de loadtest

De ordes van grootte geven een eerste formaat; een loadtest geeft het echte. Het principe: steeds meer gebruikers simuleren op een kopie van de applicatie, en het moment noteren waarop de responstijd wegloopt.

Terminal: 50 verbindingen gedurende 30 seconden, met wrk
wrk -t2 -c50 -d30s --latency https://staging.uw-site.com/

Voor een volledig traject (inloggen, navigeren, zoeken) beschrijft k6 een scenario in JavaScript en voert het de belasting stap voor stap op:

k6-script (test.js), gestart met: 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.uw-site.com/');
  sleep(15);
}

Als de belasting groeit

De volgorde die het minst kost en het meest oplevert:

  1. Cachen wat gecachet kan worden (pagina’s, fragmenten, queryresultaten) en trage query’s corrigeren.
  2. Het aantal workers afstemmen op het beschikbare geheugen en de beschikbare processor.
  3. Overstappen naar een groter formaat: meer vCPU en geheugen, zonder iets aan de applicatie te veranderen.
  4. De database op een eigen server zetten.
  5. De applicatie over meerdere servers verdelen achter een load balancer.

De eerste drie stappen dekken de overgrote meerderheid van bedrijfsapplicaties, websites en API’s: enkele honderden gebruikers die tegelijk actief zijn, passen op één goed afgestelde server.

Een server die meegroeit met uw gebruikers

VPS Pro is er in zes formaten, op Intel Xeon-processors, ECC-geheugen en gespiegelde NVMe-SSD’s, en stapt op elk moment over naar een groter formaat, zonder herinstallatie. Full-Stack Support is inbegrepen: vertel ons hoeveel gebruikers u bij de lancering en over een jaar verwacht, en wij adviseren u over het formaat; en wanneer een pagina trager wordt, stellen wij de diagnose en vertellen u wat u moet doen, van het systeem tot de code van uw applicatie.

Ontdek VPS Pro

Veelgestelde vragen

Hoeveel gebruikers kan een VPS met 2 vCPU en 4 GB aan?

Voor een API of een applicatie waarvan de verzoeken 10 tot 20 ms rekentijd vragen, enkele honderden gebruikers die tegelijk actief zijn. Voor een WordPress-website zonder paginacache ongeveer honderd. Het verschil zit in de rekentijd van elk verzoek en in de cache, vandaar het nut van een loadtest.

Hoeveel bezoekers per dag kan een VPS ontvangen?

Het aantal bezoekers per dag zegt weinig: wat telt, is de piek. Om van het ene naar het andere te gaan, deelt u de bezoeken van de dag door de actieve uren, vermenigvuldigt u met het aantal paginaweergaven per bezoek, en daarna met een piekfactor van 3 tot 5. 10.000 bezoeken over 10 uur, met elk 4 pagina’s, geven gemiddeld ongeveer 1 pagina per seconde, en 3 tot 5 op de piek.

Hoe weet ik of mijn server verzadigd is?

Drie signalen: de responstijd stijgt met het verkeer, de processor blijft tijdens piekuren boven 80%, of het beschikbare geheugen zakt tot bijna nul. De logs van de webserver tonen dan 502- of 504-fouten, en de verzoeken wachten op een vrije worker.

Veranderen websockets de berekening?

Ja: een websocketverbinding blijft permanent open. Ze verbruikt weinig processor en enkele tientallen kilobytes geheugen. Een Node.js-server houdt er duizenden vast; het zijn de verzonden berichten, meer dan de open verbindingen, die de processor belasten.

Neem contact op