Ilu jednoczesnych użytkowników obsłuży VPS: jak to policzyć

Wszystko zaczyna się od pytania: co robią ci użytkownicy? Tysiąc osób zalogowanych do aplikacji nie wysyła tysiąca żądań na sekundę, a strona serwowana z pamięci podręcznej kosztuje sto razy mniej niż strona generowana przy każdej wizycie. Ten poradnik przelicza użytkowników na żądania, żądania na procesor i pamięć, a następnie pokazuje, jak to sprawdzić testem obciążeniowym.

Opublikowano 26 października 2026 Autor: Czas czytania: 9 minut

Wszystkie poradniki

W skrócie

  1. Zalogowani użytkownicy to nie jednoczesne żądania: aktywny użytkownik wysyła żądanie mniej więcej co 10 do 30 sekund.
  2. Żądania w toku = żądania na sekundę × czas trwania żądania (prawo Little’a). Tę liczbę musi wytrzymać serwer.
  3. Jeden vCPU obsłuży najwyżej 1 000 ÷ (milisekundy obliczeń na żądanie) żądań na sekundę: 20 ms obliczeń to 50 żądań na sekundę.
  4. Pamięć ogranicza liczbę workerów: każdy proces PHP lub Pythona zajmuje od 40 do 200 MB.
  5. Pamięć podręczna zmienia wszystko: strona serwowana z pamięci podręcznej kosztuje mniej niż milisekundę, generowana strona WordPress od 100 do 300.
  6. Proszę mierzyć testem obciążeniowym (k6, wrk) na kopii aplikacji, zwiększając obciążenie stopniowo.

Od użytkowników do żądań

„Jednocześni użytkownicy” to trzy różne wielkości, zależnie od tego, kto o nich mówi:

Od jednej wielkości do drugiej przechodzi się dzięki prawu Little’a: liczba żądań w toku równa się przepustowości, w żądaniach na sekundę, pomnożonej przez średni czas trwania żądania.

Przykład. 600 użytkowników aktywnych jednocześnie, z których każdy wysyła żądanie co 20 sekund, daje 30 żądań na sekundę. Jeśli każde żądanie trwa 100 ms, serwer ma średnio tylko 3 żądania w toku. Wyzwanie leży gdzie indziej: w szczytach i w wolnych żądaniach.

Ile obsłuży jeden vCPU

Żądanie zajmuje procesor przez czas swoich obliczeń: wykonanie kodu, zapytanie do bazy, zbudowanie odpowiedzi. Jeden vCPU przetwarza więc najwyżej 1 000 ÷ t żądań na sekundę, gdzie t to czas obliczeń jednego żądania w milisekundach. Czas oczekiwania (na zewnętrzne API, na dysk) nie zajmuje procesora, ale zajmuje workera.

Rodzaj żądaniaTypowy czas obliczeńNa vCPU, rząd wielkości
Plik statyczny lub strona serwowana z pamięci podręcznejPoniżej 1 msKilka tysięcy żądań na sekundę
Strona WordPress serwowana z pamięci podręcznej stronOd 1 do 5 msKilkaset na sekundę
API JSON (Node.js, Go, FastAPI) z zapytaniem SQL korzystającym z indeksuOd 5 do 20 msOd 50 do 200 na sekundę
Strona WordPress lub Laravel generowana przy każdej wizycieOd 100 do 300 msOd 3 do 10 na sekundę
Raport, eksport, generowanie PDFOd 500 ms do kilku sekundMniej niż 2 na sekundę

Przy tych rzędach wielkości 30 żądań API na sekundę po 10 ms obliczeń zajmuje 30 % jednego vCPU. Te same 30 żądań na sekundę na stronach WordPress bez pamięci podręcznej wymaga od 3 do 9 vCPU. Pamięć podręczna stron służy właśnie do tego, aby przenieść stronę z czwartego wiersza tabeli do drugiego.

Ile zmieści pamięć

Każde żądanie w toku obsługuje worker, a workery zajmują pamięć bez względu na to, czy pracują. To często pamięć, bardziej niż procesor, wyznacza liczbę żądań przetwarzanych równolegle:

Połączenia stałe (websockety, powiadomienia w czasie rzeczywistym) liczy się osobno: otwarte bez przerwy, zajmują niewiele procesora i po kilkadziesiąt kilobajtów pamięci każde. Serwer Node.js utrzymuje ich tysiące w kilkuset MB.

Prawdziwe wąskie gardła

W rzeczywistej aplikacji serwer rzadko osiąga limit tam, gdzie się tego spodziewamy. Najczęstsze przyczyny, w kolejności, w jakiej warto ich szukać:

  1. Wolne zapytanie SQL: brakujący indeks zamienia zapytanie trwające 2 ms w zapytanie trwające 2 sekundy, które blokuje workera i połączenie. Wskazuje je pg_stat_statements w PostgreSQL lub dziennik wolnych zapytań MySQL.
  2. Zapytania kaskadowe (problem N+1): strona, która wysyła jedno zapytanie na każdy wyświetlany wiersz, wysyła ich setki.
  3. Synchroniczne wywołanie zewnętrzne: API płatności lub AI, które odpowiada w 3 sekundy, blokuje synchronicznego workera na 3 sekundy.
  4. Ciężkie operacje wewnątrz żądania: wysyłka e-maili, zmiana rozmiaru obrazów, generowanie PDF, do przeniesienia do kolejki zadań.
  5. Brak pamięci podręcznej: strony identyczne dla wszystkich odwiedzających serwuje się z pamięci podręcznej, a pliki statyczne z serwera WWW.

Sprawdzenie: test obciążeniowy

Rzędy wielkości dają pierwszy rozmiar; test obciążeniowy daje rzeczywisty. Zasada: symulować coraz większą liczbę użytkowników na kopii aplikacji i odnotować moment, w którym czas odpowiedzi gwałtownie rośnie.

Terminal: 50 połączeń przez 30 sekund, z wrk
wrk -t2 -c50 -d30s --latency https://test.panstwa-strona.com/

Dla pełnej ścieżki (logowanie, nawigacja, wyszukiwanie) k6 opisuje scenariusz w JavaScripcie i zwiększa obciążenie etapami:

Skrypt k6 (test.js), uruchamiany poleceniem: 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://test.panstwa-strona.com/');
  sleep(15);
}

Gdy obciążenie rośnie

Kolejność, która kosztuje najmniej i daje najwięcej:

  1. Umieścić w pamięci podręcznej to, co się da (strony, fragmenty, wyniki zapytań), i poprawić wolne zapytania.
  2. Dostosować liczbę workerów do dostępnej pamięci i procesora.
  3. Przejść na większy rozmiar: więcej vCPU i pamięci, bez żadnych zmian w aplikacji.
  4. Przenieść bazę danych na osobny serwer.
  5. Rozłożyć aplikację na kilka serwerów za systemem równoważenia obciążenia (load balancer).

Pierwsze trzy kroki obejmują zdecydowaną większość aplikacji biznesowych, stron i API: kilkuset użytkowników aktywnych jednocześnie mieści się na jednym dobrze skonfigurowanym serwerze.

Serwer, który rośnie razem z Państwa użytkownikami

VPS Pro jest dostępny w sześciu rozmiarach, na procesorach Intel Xeon, pamięci ECC i SSD NVMe w konfiguracji lustrzanej, i przechodzi na większy rozmiar w dowolnej chwili, bez ponownej instalacji. Kompleksowe wsparcie jest w cenie: proszę nam napisać, ilu użytkowników spodziewają się Państwo na start i za rok, a doradzimy rozmiar; a gdy jakaś strona zwalnia, diagnozujemy i wskazujemy, co zrobić, od systemu po kod Państwa aplikacji.

Poznaj VPS Pro

Częste pytania

Ilu użytkowników obsłuży VPS z 2 vCPU i 4 GB?

W przypadku API lub aplikacji, której żądania wymagają od 10 do 20 ms obliczeń, kilkuset użytkowników aktywnych jednocześnie. W przypadku strony WordPress bez pamięci podręcznej stron około stu. Różnica wynika z czasu obliczeń każdego żądania i z pamięci podręcznej, dlatego warto przeprowadzić test obciążeniowy.

Ilu odwiedzających dziennie przyjmie VPS?

Liczba odwiedzających dziennie niewiele mówi: liczy się szczyt. Aby przejść od jednej wielkości do drugiej, proszę podzielić dzienne wizyty przez godziny aktywności, pomnożyć przez liczbę odsłon na wizytę, a następnie przez współczynnik szczytu od 3 do 5. 10 000 wizyt w ciągu 10 godzin, po 4 strony każda, daje średnio około 1 strony na sekundę, a w szczycie od 3 do 5.

Jak sprawdzić, czy serwer jest przeciążony?

Trzy sygnały: czas odpowiedzi rośnie razem z ruchem, procesor utrzymuje się powyżej 80 % w godzinach szczytu lub dostępna pamięć spada prawie do zera. Logi serwera WWW pokazują wtedy błędy 502 lub 504, a żądania czekają na wolnego workera.

Czy websockety zmieniają obliczenia?

Tak: połączenie websocket pozostaje otwarte bez przerwy. Zużywa niewiele procesora i kilkadziesiąt kilobajtów pamięci. Serwer Node.js utrzymuje ich tysiące; procesor obciążają bardziej wysyłane wiadomości niż otwarte połączenia.

Skontaktuj się z nami