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 · World Congress 2026 Europe

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 · World Congress 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

September 25, 2026 · 10:20–10:50

Stage 4

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

September 25, 2026 · 15:30–15:40

Outdoor Stage

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

September 24, 2026 · 11:40–12:10

Stage 3

Stop Running Mystery Meat in Production

Jeroen van Erp

Technical Advocate @ SUSE

Jeroen van Erp
Open session

World Congress 2026 North America

September 25, 2026 · 16:00–16:10

Outdoor Stage

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

September 24, 2026 · 15:30–16:00

Stage 9

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

September 25, 2026 · 09:40–10:10

Stage 4

Your registry can't stop a valid login. What happens then?

Khushboo Verma

Systems Engineer at Cloudflare

Khushboo Verma