World Congress 2026 Europe - Virtual Stage Jul 2, 2026 Session details

The Memory Leak That Ate Our Cluster: A Postmortem

Dina Matveev

A persistent Puppeteer memory leak was silently eating our Node.js cluster. Discover how we finally eliminated OOM crashes and zombie processes using disposable contexts and OS-level process management.

Pause
Mute Enter Fullscreen
#1 about 2 min

Architecture context and out of memory cluster crashes

A document generation API experiences severe instability as pods unexpectedly crash from out-of-memory errors.

#2 about 2 min

Testing naive solutions with more pods and memory

Increasing pod counts and doubling RAM limits fail to resolve persistent memory leaks.

#3 about 2 min

Visualizing memory limits and isolating suspicious endpoints

Creating a Datadog dashboard reveals gradual memory hoarding and correlates spikes to specific API endpoints.

#4 about 2 min

Investigating database connections and node heap dumps

Checking open database connections and profiling the node heap fails to explain the memory magnitude.

#5 about 2 min

Analyzing screenshot generation and puppeteer library versions

Upgrading Puppeteer does not resolve the memory climb caused by underlying code implementation flaws.

#6 about 2 min

Identifying memory accumulation in singleton browser patterns

Reusing a single Chrome instance to save overhead leads to massive accumulations of cache and unclosed resources.

#7 about 2 min

Attempting browser isolation with one instance per request

Launching a fresh Chromium instance for every request prevents shared state but still results in memory errors.

#8 about 3 min

Uncovering unclosed zombie processes in the operating system

Treating Puppeteer as a process manager reveals that failed requests leave unused Chromium zombies hoarding memory.

#9 about 2 min

Implementing incognito contexts for performance and state isolation

Using a single Chrome process with separate disposable window contexts resolves the memory leak entirely.

#10 about 1 min

Destroying zombie processes by enabling init in Docker

Adding the init process to Docker Compose automatically adopts and collects exit statuses for orphaned child processes.

#11 about 1 min

Preventing resource exhaustion by defining browser task timeouts

Setting strict timeouts on page navigations and interactions stops frozen browsers from permanently holding memory slots.

#12 about 3 min

Customizing Chrome launch flags for headless server environments

Disabling extensions, bypassing shared memory limits, and dropping GPU rendering drastically improves stability.

Matching moments

2:15 min

Browser developer tools for detecting memory leaks

Alex Gorbunov Alex Gorbunov · Europe 2026 Virtual

2:51 min

Managing browser memory usage across Chromium environments

Chris Heilmann +2 · LIVE

3:32 min

Isolating metaspace memory leaks with a minimal reproducer

Marco Sussitz Marco Sussitz · WWC Europe 2026

2:11 min

Containerizing Puppeteer and Chromium within Docker environments

Miki Lombardi · JS Congress

2:17 min

Debugging isolated contexts and managing dynamic browser memory

Igor Minar Igor Minar +1 · WWC 2025

2:26 min

Understanding Puppeteer and its underlying architectural design

Miki Lombardi · JS Congress

Upcoming sessions on this topic

Open session

World Congress 2026 North America

rm -rf: Horror Stories From Unsandboxed AI Agents (and How Docker Fixes This)

Rishab Kumar

Staff Developer Evangelist @ Twilio

Rishab Kumar
Open session

World Congress 2026 North America

Offloading IoT State: Solving the Memory Crisis on Legacy Hardware

Pravin Nagare

Senior Software Engineer, Roku

Pravin Nagare
Open session

World Congress 2026 North America

Stop Running Mystery Meat in Production

Jeroen van Erp

Technical Advocate @ SUSE

Jeroen van Erp
Open session

World Congress 2026 North America

public void saveMoney(AI): The Developer's Guide to Unit Economics

Hrushikesh Pokala

Senior Software Engineer Lead at Equifax

Hrushikesh Pokala
Open session

World Congress 2026 North America

Run your agents in Kubernetes: Build once, deploy anywhere. But really?

Michal Salanci

Senior Systems Engineer at ESET Cybersecurity

Michal Salanci
Open session

World Congress 2026 North America

Boring Failover: Predictable Region Recovery Across 5,000 Microservices

Garvit Kataria, Sahil Sabharwal

Garvit Kataria
Sahil Sabharwal