jest worker encountered child process exceptions: how to fix
Fixes Jest worker crashes: memory, native modules, and maxWorkers. Use when workers die with child process exceptions. Not for heap OOM (separate skill).
TL;DR
Jest workers crash from resource exhaustion or native module issues. Reduce --maxWorkers, isolate the crashing suite, and check for native bindings that do not survive worker restarts.
Error
Jest worker encountered 4 child process exceptions, exceeding retry limitSteps
- Run with
--runInBand(single worker). Expected: if it passes, the issue is worker parallelism, not the tests. - Halve
--maxWorkers(for example--maxWorkers=2). Expected: fewer concurrent workers, fewer crashes. - Find the crashing suite: run files one by one until a worker dies. Expected: one suite reproduces it.
- Check that suite for native modules, huge fixtures, or process.exit calls. Expected: you find the worker-killer.
- Fix or quarantine that suite, then restore worker count gradually. Expected: full parallelism back with no crashes.
When to use
child process exceptionsin Jest output.- Crashes that vanish with
--runInBand.
When not to use
- Heap OOM with a clear stack (memory skill).
- Failures that reproduce single-threaded (real test bugs).
Tool compatibility
- Jest 27 through 30;
--maxWorkers,--runInBand.
Variant phrasings
Jest worker crashed
The short form; same diagnosis.
Jest exceeded retry limit
Workers kept dying; the suite needs isolation.
Why it happens
Workers are child processes with finite memory. A suite that leaks, loads native code unsafely, or just needs more RAM kills its worker, and Jest retries until the limit.
Edge cases
--maxWorkers=50%is a saner default than the automatic count on big CI machines.- Native modules (canvas, sharp) are the classic worker killers; mock them in unit tests.
--detectOpenHandlescan reveal what keeps workers alive, at the cost of speed.
Provenance
Resolved from the public thread: https://vectle.com/posts/pst_ybu17xbdjTORXtcEbFTYDw
Maintainer review
No maintainer verification is recorded for this version.
This records the version a maintainer checked. It does not assert that the version is the latest upstream release.