Alles beginnt mit einer Frage: Was tun diese Nutzer? Tausend Personen, die in einer Anwendung angemeldet sind, stellen nicht tausend Anfragen pro Sekunde, und eine Seite aus dem Cache kostet hundertmal weniger als eine Seite, die bei jedem Aufruf berechnet wird. Dieser Leitfaden übersetzt Nutzer in Anfragen, Anfragen in Prozessor und Arbeitsspeicher, und zeigt dann, wie Sie das Ergebnis mit einem Lasttest überprüfen.
„Gleichzeitige Nutzer“ bezeichnet je nachdem, wer spricht, drei verschiedene Größen:
Von der einen zur anderen kommt man mit dem Gesetz von Little: die Zahl der laufenden Anfragen ist gleich dem Durchsatz, in Anfragen pro Sekunde, multipliziert mit der mittleren Dauer einer Anfrage.
Beispiel. 600 gleichzeitig aktive Nutzer, die jeweils alle 20 Sekunden eine Anfrage auslösen, erzeugen 30 Anfragen pro Sekunde. Dauert jede Anfrage 100 ms, hat der Server im Mittel nur 3 laufende Anfragen. Die eigentliche Herausforderung liegt woanders: in den Spitzen und in den langsamen Anfragen.
Eine Anfrage belegt den Prozessor für die Dauer ihrer Berechnung: den Code ausführen, die Datenbank abfragen, die Antwort aufbauen. Eine vCPU verarbeitet daher höchstens 1.000 ÷ t Anfragen pro Sekunde, wobei t die Rechenzeit einer Anfrage in Millisekunden ist. Wartezeit (auf eine externe API, auf die Festplatte) belegt den Prozessor nicht, wohl aber einen Worker.
| Art der Anfrage | Typische Rechenzeit | Pro vCPU, Größenordnung |
|---|---|---|
| Statische Datei oder Seite aus dem Cache | Unter 1 ms | Mehrere tausend Anfragen pro Sekunde |
| WordPress-Seite aus einem Seiten-Cache | 1 bis 5 ms | Mehrere hundert pro Sekunde |
| JSON-API (Node.js, Go, FastAPI) mit einer indizierten SQL-Abfrage | 5 bis 20 ms | 50 bis 200 pro Sekunde |
| WordPress- oder Laravel-Seite, bei jedem Aufruf berechnet | 100 bis 300 ms | 3 bis 10 pro Sekunde |
| Bericht, Export, PDF-Erzeugung | 500 ms bis mehrere Sekunden | Weniger als 2 pro Sekunde |
Mit diesen Größenordnungen belegen 30 API-Anfragen pro Sekunde mit 10 ms Rechenzeit 30 % einer einzigen vCPU. Dieselben 30 Anfragen pro Sekunde auf WordPress-Seiten ohne Cache verlangen 3 bis 9 vCPU. Genau dafür ist der Seiten-Cache da: er bringt eine Seite von der vierten Zeile der Tabelle in die zweite.
Jede laufende Anfrage wird von einem Worker bearbeitet, und Worker belegen Arbeitsspeicher, ob sie arbeiten oder nicht. Oft ist es der Arbeitsspeicher, mehr als der Prozessor, der die Zahl parallel bearbeiteter Anfragen bestimmt:
pm.max_children setzt die Obergrenze: 20 Prozesse belegen 800 MB bis 1,6 GB.max_connections.Dauerhafte Verbindungen (WebSockets, Echtzeitbenachrichtigungen) zählen gesondert: ständig offen, belegen sie wenig Prozessorzeit und jeweils einige zehn Kilobyte Arbeitsspeicher. Ein Node.js-Server hält Tausende davon mit einigen hundert MB.
In einer realen Anwendung stößt der Server selten dort an seine Grenze, wo man es erwartet. Die häufigsten Ursachen, in der Reihenfolge, in der Sie sie suchen sollten:
pg_stat_statements bei PostgreSQL oder das Slow Query Log von MySQL zeigt sie an.Die Größenordnungen liefern eine erste Größe; ein Lasttest liefert die tatsächliche. Das Prinzip: immer mehr Nutzer auf einer Kopie der Anwendung simulieren und den Moment festhalten, in dem die Antwortzeit sprunghaft ansteigt.
wrk -t2 -c50 -d30s --latency https://staging.ihre-website.com/
Für einen vollständigen Ablauf (Anmeldung, Navigation, Suche) beschreibt k6 ein Szenario in JavaScript und steigert die Last stufenweise:
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.ihre-website.com/');
sleep(15);
}
htop für den Prozessor, free -h für den Arbeitsspeicher, die Logs für Fehler.Die Reihenfolge, die am wenigsten kostet und am meisten bringt:
Die ersten drei Schritte decken die große Mehrheit der Geschäftsanwendungen, Websites und APIs ab: mehrere hundert gleichzeitig aktive Nutzer finden auf einem einzigen, gut eingestellten Server Platz.
Den VPS Pro gibt es in sechs Größen, auf Intel-Xeon-Prozessoren, ECC-Speicher und gespiegelten NVMe-SSDs, und er wechselt jederzeit ohne Neuinstallation in die nächsthöhere Größe. Der Full-Stack-Support ist inbegriffen: nennen Sie uns, wie viele Nutzer Sie zum Start und in einem Jahr erwarten, wir empfehlen Ihnen die Größe; und wenn eine Seite langsamer wird, stellen wir die Diagnose und sagen Ihnen, was zu tun ist, vom System bis zum Code Ihrer Anwendung.
Bei einer API oder Anwendung, deren Anfragen 10 bis 20 ms Rechenzeit brauchen, mehrere hundert gleichzeitig aktive Nutzer. Bei einer WordPress-Website ohne Seiten-Cache etwa hundert. Der Unterschied liegt in der Rechenzeit jeder Anfrage und im Cache, und genau dafür lohnt sich ein Lasttest.
Die Zahl der Besucher pro Tag sagt wenig aus: entscheidend ist die Spitze. Um von einem zum anderen zu kommen, teilen Sie die Besuche des Tages durch die aktiven Stunden, multiplizieren mit den Seitenaufrufen pro Besuch und dann mit einem Spitzenfaktor von 3 bis 5. 10.000 Besuche über 10 Stunden mit je 4 Seiten ergeben im Mittel etwa 1 Seite pro Sekunde und 3 bis 5 zur Spitzenzeit.
An drei Zeichen: die Antwortzeit steigt mit dem Traffic, der Prozessor bleibt zu Spitzenzeiten über 80 %, oder der verfügbare Arbeitsspeicher fällt gegen null. Die Logs des Webservers zeigen dann Fehler 502 oder 504, und die Anfragen warten auf einen freien Worker.
Ja: eine WebSocket-Verbindung bleibt dauerhaft offen. Sie verbraucht wenig Prozessorzeit und einige zehn Kilobyte Arbeitsspeicher. Ein Node.js-Server hält Tausende davon; es sind die gesendeten Nachrichten, mehr als die offenen Verbindungen, die den Prozessor belasten.
Simafri
Sprechen wir über Ihr Vorhaben
Sagen Sie uns in wenigen Worten, was Sie brauchen: Wir melden uns schnell bei Ihnen.
Vielen Dank! Ihre Anfrage wurde gesendet. Wir melden uns in Kürze bei Ihnen.
Sie schreiben lieber eine E-Mail? Schreiben Sie uns an support@simafri.com.