Exit code 137 is 128 + 9, meaning the process received SIGKILL. On a memory-limited runner that is almost always the out-of-memory killer terminating the heaviest process.
What this error means
A step ends abruptly with Killed and the runner reports exit code 137. There is rarely a stack trace because SIGKILL cannot be caught. Re-running on a larger runner usually passes unchanged.
github-actions
Killed
##[error] Process completed with exit code 137.
Common causes
The job exceeded the runner memory ceiling
A compile, bundler, test suite, or data load spiked past available RAM, so the kernel OOM killer terminated the largest process with SIGKILL.
A container memory limit is too low
When the job runs with --memory/-m set, exceeding that limit triggers the same kill at exit 137 even with free host RAM.
How to fix it
Give the job more memory
Run on a larger runner with more RAM.
Raise or remove an explicit container --memory limit if one is set.
Cap language heaps below the ceiling (NODE_OPTIONS=--max-old-space-size=4096, JVM -Xmx).
Confirm it was memory, then reduce peak usage
Check the kernel log for the OOM event, then lower the high-water mark.
shell
dmesg -T | grep -i -E 'killed process|out of memory'
make -j2 # instead of -j$(nproc)
How to prevent it
Right-size runners for memory-heavy builds.
Set language heap limits relative to runner RAM.
Watch peak memory in CI to catch growth early.
Frequently asked questions
What causes "Exit code 137 (OOM)"?
A compile, bundler, test suite, or data load spiked past available RAM, so the kernel OOM killer terminated the largest process with SIGKILL.
How do I fix Exit code 137 (OOM)?
Give the job more memory
Can Latchkey fix this automatically?
Yes. Latchkey runs your GitHub Actions on managed runners that detect this failure, apply the fix, and retry the job automatically - self-healing is on by default.