Wie optimiert man die Speicherverwaltung bei der parallelen Ausführung von hunderten Headless-Browser-Instanzen in einem Kubernetes-Pod?

Die Optimierung der Speicherverwaltung bei einer hohen Dichte an Headless-Browsern erfordert eine strikte Trennung zwischen Browser-Prozessen und Browser-Kontexten. Wir setzen primär auf die Nutzung von BrowserContexts (z. B. in Playwright oder Puppeteer), anstatt für jede Aufgabe eine neue Browser-Instanz zu starten. Ein einzelner Browser-Prozess kann hunderte isolierte Kontexte verwalten, was den Overhead für den Start des Binärprogramms und den Grundspeicherverbrauch massiv reduziert.

Ein kritischer Punkt in Kubernetes ist der begrenzte Shared-Memory-Speicher (/dev/shm). Standardmäßig ist dieser auf 64 MB limitiert, was bei Chrome-Instanzen schnell zu Abstürzen führt. Wir lösen dies durch das Mounten eines emptyDir-Volumes mit dem Medium Memory auf /dev/shm, wodurch der Browser auf den RAM des Nodes zugreifen kann.

Folgende technische Parameter optimieren wir zur Reduktion des Footprints:

BereichMaßnahmeErgebnis
Prozess-ManagementNutzung von tini als Init-ProzessVermeidung von Zombie-Prozessen
Browser-Flags--disable-gpu, --disable-dev-shm-usageGeringerer RAM-Bedarf
Netzwerk-FilterBlockieren von Bildern, CSS und FontsReduzierter Heap-Speicher
K8s-KonfigurationPräzise Memory-Limits & RequestsVermeidung von OOMKills

Zusätzlich implementieren wir ein striktes Lifecycle-Management. Browser-Kontexte werden sofort nach Abschluss der Aufgabe zerstört. Bei einer Skalierung in der Cloud & Digital Workplace Infrastruktur überwachen wir die Memory-Usage pro Kontext, um dynamische Timeouts zu setzen, falls ein Tab aufgrund von Memory-Leaks im Zielsystem zu viel Speicher belegt.

Wir raten davon ab, hunderte Instanzen in einem einzigen Pod zu betreiben. Trotz aller Optimierungen bleibt die Fehlerdomäne zu groß und das Risiko eines Kaskadeneffekts bei einem Memory-Leak zu hoch. Die technisch überlegene Lösung ist die Auslagerung der Browser-Instanzen in einen dedizierten Browser-Cluster (z. B. via Browserless), wobei der Kubernetes-Pod lediglich als schlanker Orchestrator fungiert. Dies entkoppelt die rechenintensive Rendering-Logik von der Geschäftslogik und ermöglicht eine granulare horizontale Skalierung.

Sergej Wiens

Sergej Wiens

Gründer & Software Architekt