Der Arbeitsspeicher ist die Ressource, die am häufigsten über die Größe eines Servers entscheidet: er geht als Erstes aus, und wenn er ausgeht, wird der Server nicht einfach langsamer, sondern beendet Dienste. Dieser Leitfaden gibt Ihnen die Rechenregel, den Bedarf jedes Bausteins einer Anwendung, typische Profile und zeigt, wie Sie auf einem laufenden Server messen.
available von free -h, nicht die Spalte free.Ein Server verbraucht Arbeitsspeicher nicht „im Allgemeinen“: jedes laufende Programm belegt einen Teil davon, solange es läuft. Die Rechnung beginnt daher mit der Liste der Prozesse, die dauerhaft laufen, und addiert dann die Spitze und eine Reserve:
Einzuplanender Arbeitsspeicher = (System + dauerhafte Dienste + Spitze der gelegentlichen Aufgaben) × 1,25
Die folgenden Größenordnungen gelten für eine Anwendung üblicher Größe, gemessen in Produktion. Sie sind ein Ausgangspunkt; die Messung an Ihrer eigenen Anwendung, weiter unten beschrieben, hat immer das letzte Wort.
| Baustein | Typischer Speicherbedarf | Wovon er abhängt |
|---|---|---|
| Nginx, Caddy (Webserver, Proxy) | 10 bis 50 MB | Nahezu fest: die Zahl der Verbindungen fällt kaum ins Gewicht. |
| PHP-FPM (WordPress, Laravel, Symfony) | 40 bis 80 MB pro Prozess | Die Zahl der Prozesse, begrenzt durch pm.max_children: 10 Prozesse belegen 400 bis 800 MB. |
| Node.js (API, Next.js, NestJS) | 60 bis 300 MB pro Prozess | Die Zahl der Prozesse (Cluster-Modus, PM2) und die Heap-Größe, begrenzt durch --max-old-space-size. |
| Python (Django, FastAPI, Flask) | 80 bis 200 MB pro Prozess | Die Zahl der Gunicorn- oder Uvicorn-Worker und die geladenen Bibliotheken: pandas oder ein Machine-Learning-Modell fügen Hunderte MB hinzu. |
| Java (Spring Boot) | 300 MB bis 1 GB pro Anwendung | Die maximale Heap-Größe: standardmäßig nimmt sich die JVM ein Viertel des Speichers, den sie sieht. |
| Go, Rust | 10 bis 100 MB | Die Daten, die die Anwendung selbst im Speicher hält. |
| PostgreSQL | 25 % des Speichers für shared_buffers, dazu einige MB pro Verbindung | Die Menge häufig gelesener Daten, die Zahl der Verbindungen, work_mem. |
| MySQL, MariaDB | innodb_buffer_pool_size, standardmäßig 128 MB | Auf einem Server, der nur die Datenbank betreibt, belegt dieser Puffer üblicherweise bis zu 80 % des Speichers. |
| Redis | Die Größe der Daten, dazu seine Strukturen | Während einer Sicherung auf die Festplatte werden geänderte Seiten dupliziert: im ungünstigsten Fall bis zum Doppelten. |
| Elasticsearch, OpenSearch | Mindestens 2 GB für den Heap | Der Heap bleibt unter der Hälfte des Speichers: der Rest dient als Datei-Cache. |
Eine Spitze kehrt bei JavaScript-Anwendungen immer wieder: der Build. npm run build braucht bei einem Next.js-, Nuxt- oder Angular-Projekt üblicherweise allein 1 bis 2 GB, einige Minuten lang, zusätzlich zu allem, was schon läuft. Auf dem Server zu bauen heißt, für diese Spitze zu bemessen; auf Ihrem Rechner oder in Ihrer CI-Pipeline zu bauen und nur das Ergebnis hochzuladen, heißt, sie zu vermeiden.
Dieselbe Überlegung gilt für Docker-Container: jeder Container ist eine Gruppe gewöhnlicher Prozesse, und der Docker-Daemon bringt seinen eigenen Verbrauch mit. docker stats zeigt, was jeder einzelne belegt.
Diese Profile addieren die Bausteine von oben, Spitze und Reserve inklusive. Sie gehen von einer Anwendung üblicher Größe und dem Traffic eines Starts aus; eine umfangreiche Datenbank oder anhaltender Traffic verschieben den Wert nach oben.
| Was auf dem Server läuft | Einzuplanender Arbeitsspeicher |
|---|---|
| Statische Website, Proxy, kleiner Bot oder geplantes Skript | 1 bis 2 GB |
| Eine WordPress-Website mit MariaDB und Seiten-Cache | 2 GB |
| Ein WooCommerce-Shop oder mehrere WordPress-Websites | 4 GB |
| Eine Node.js- oder Python-API mit PostgreSQL, erste Nutzer | 4 GB |
| Eine auf dem Server gebaute Next.js-Anwendung, ihre API und ihre PostgreSQL-Datenbank | 6 bis 8 GB |
| Mehrere Anwendungen in Containern, Staging und Produktion | 8 GB |
| Eine Datenbank von mehreren zehn GB, intensiv abgefragt | 16 GB und mehr |
| Ein Sprachmodell mit 7 bis 8 Milliarden Parametern, auf dem Server ausgeführt | 16 GB |
Eine Anwendung, die ein KI-Modell per API aufruft (OpenAI, Anthropic, Mistral), wird bemessen wie jede andere Webanwendung: das Modell läuft beim Anbieter, und Ihr Server wartet auf die Antwort. Erst die Ausführung des Modells auf dem Server selbst verändert die Größenordnung.
Auf einem Server in Betrieb ersetzt die Messung die Schätzung. Drei Befehle zeigen, wo Sie stehen:
free -h
ps aux --sort=-rss | head -n 15
vmstat 5 5
free -h: lesen Sie die Spalte available, den Speicher, der tatsächlich für neue Programme verfügbar ist. Die Spalte free ist fast immer niedrig, und das ist normal: Linux füllt ungenutzten Speicher mit dem Datei-Cache (buff/cache) und gibt ihn frei, sobald ein Programm ihn braucht.ps aux --sort=-rss: die Prozesse nach belegtem Speicher sortiert (Spalte RSS, in Kilobyte). Hier sehen Sie, was jeder PHP- oder Node.js-Worker wiegt.vmstat 5 5: fünf Messungen im Abstand von fünf Sekunden. Werte ungleich null in den Spalten si und so, Messung für Messung, zeigen einen Server, der in den Swap auslagert: ihm fehlt Arbeitsspeicher.Messen Sie zur geschäftigsten Tageszeit und während der gelegentlichen Aufgaben: Build, Backup, Import. Es zählt die Spitze.
Ein Server ohne freien Speicher wird nicht allmählich langsamer. Wenn nichts mehr freizugeben ist, löst der Linux-Kernel den OOM-Killer aus (out of memory): er wählt einen Prozess, in der Regel den mit dem größten Speicherverbrauch, und beendet ihn sofort. Auf einem Anwendungsserver ist das oft die Datenbank.
Die Symptome: zeitweise Fehler 502 oder 503, ein Dienst, der ohne erkennbaren Grund neu startet, ein Build, der mit Killed abbricht. Die Logs bestätigen es:
journalctl -k | grep -i "out of memory"
systemctl status name-des-dienstes
In der Ausgabe von systemctl status kennzeichnet der Hinweis Failed with result 'oom-kill' einen Dienst, der aus Speichermangel beendet wurde.
Der Swap, sofern der Server einen hat, zögert diesen Moment hinaus, indem er den am wenigsten genutzten Speicher auf die Festplatte auslagert. Er ist ein Sicherheitsnetz, keine Kapazität: ein Server, der dauerhaft auf den Swap angewiesen ist, antwortet um ein Mehrfaches langsamer, selbst auf einer NVMe-SSD.
Die Abhilfen, von der einfachsten bis zur nachhaltigsten: die Zahl der Anwendungsprozesse senken (pm.max_children, Gunicorn-Worker), außerhalb des Servers bauen, den Speicher der Datenbank begrenzen, dann in die nächsthöhere Größe wechseln.
Neben dem Arbeitsspeicher zählen weitere Ressourcen: der Prozessor für alles, was rechnet (Build, Bildverarbeitung, Ausführung eines KI-Modells), die Festplatte für die Datenbank und die Dateien. Bei einer Webanwendung ist es dennoch fast immer der Arbeitsspeicher, der die Größe bestimmt.
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: beschreiben Sie uns, was Ihr Server betreiben soll, wir empfehlen Ihnen die Größe, und danach stellen wir bei jeder Frage die Diagnose und sagen Ihnen, was zu tun ist, vom System bis zum Code Ihrer Anwendung.
Eine statische Website, ein Proxy oder ein kleines Skript laufen mit 1 bis 2 GB. Sobald sich eine Datenbank und eine Anwendung (PHP, Node.js, Python) den Server teilen, rechnen Sie mit 2 GB für eine WordPress-Website und 4 GB für eine individuelle Anwendung mit PostgreSQL.
2 GB für eine Website mit MariaDB und Seiten-Cache, 4 GB für einen WooCommerce-Shop oder mehrere Websites. Die Zahl der PHP-FPM-Prozesse ist die erste Stellschraube: jeder belegt 40 bis 80 MB.
Nein. Swap verhindert einen abrupten Abbruch, wenn der Speicher voll ist, aber ein Server, der ihn dauerhaft nutzt, antwortet um ein Mehrfaches langsamer, selbst auf einer NVMe-SSD. Er ist ein Sicherheitsnetz; die Größe wählt man nach dem Arbeitsspeicher.
Weil Linux ungenutzten Speicher als Datei-Cache verwendet. Dieser Cache wird freigegeben, sobald ein Programm Speicher braucht. Die Spalte, auf die es ankommt, ist available: sie zeigt den tatsächlich verfügbaren Speicher.
Rechnen Sie mit 1 bis 2 GB allein für den Build, zusätzlich zu dem, was schon auf dem Server läuft. Wenn Sie auf Ihrem Rechner oder in Ihrer CI-Pipeline bauen und nur das Ergebnis hochladen, vermeiden Sie diese Spitze.
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.