Puppeteer Scaling

Operating 10,000 Concurrent Headless Chromes

February 28, 2026 11 min read

Any data engineer who has attempted to orchestrate `puppeteer` or `playwright` at significant scale typically reaches the same miserable conclusion: browsers were intrinsically designed to be single-tenant desktop applications. They were not designed to be run concurrently on parallelized Linux cloud servers.

When ScrapixData crossed the threshold of serving 1 Billion dynamic JavaScript-rendered pages per month, our AWS EKS overhead skyrocketed. A single instance of Headless Chromium inherently devours between 150MB to 500MB of RAM upon executing JavaScript payloads, alongside spiking the vCPU upon calculating CSS paint frames.

“To run 10,000 parallel extraction pipelines, we were literally simulating 10,000 distinct visual monitors within our datacenters, calculating the X/Y coordinates of fonts that no human would ever see.”

The V8 Memory Leak Phenomenon

The primary bottleneck in mass-orchestration is zombie tabs. When extracting DOMs involving deeply nested React states or heavy WebSocket connections, the Google V8 engine's garbage collector often fails to appropriately dump closure contexts when the tab is terminated via the CDP (Chrome DevTools Protocol).

After approximately 150 requests per browser context, the underlying node instance would inevitably hit OOM (Out of Memory) crashes, triggering cascading Kubernetes pod evictions. Restarting a Chromium instance takes roughly 400ms—a catastrophic delay in a high-frequency trading extraction pipeline.

Building the Custom Headless Core

We realized that fixing the memory leaks wasn't enough; we needed to strip Chromium down to its mathematical bones. We compiled a custom fork of the Chromium C++ source tree explicitly for the Scrapix Infrastructure:

// Old Architecture Target -> Route -> Proxy -> Node -> launch Chrome -> CPU Spike -> Fetch -> OOM // Scrapix AI Engine Target -> Route -> Scrapix Edge -> Custom V8 Isolate -> DOM Map -> Raw JSON

The Results

By bypassing standard orchestration tools like Puppeteer Cluster and migrating entirely to our bare-metal V8 isolates, we observed a **92% reduction in RAM footprint** per active session. This allows Scrapix to concurrently render and execute Javascript on 10,000 overlapping requests across entirely segregated IP contexts in under a millisecond of latency overhead.

When you pass `render_js: true` to the Scrapix API, you are actively utilizing the most mathematically efficient browser fleet ever constructed.

S

Sarah Jenkins

Lead Platform Orchestrator. Scaled Kubernetes clusters for bleeding-edge enterprise environments before joining ScrapixData to slay zombie Chromes.