If you've run BullMQ in production long enough, you've probably seen a job go "stalled" — and if you haven't, you will. Here's what actually causes it, why it's more dangerous than a simple failure, and how to catch it before it costs you.
What "stalled" actually means
A stalled job isn't the same as a failed job. A failed job threw an error and BullMQ knows about it. A stalled job is one BullMQ thinks is still being processed, but the worker that picked it up has gone silent — no heartbeat, no completion, nothing. From BullMQ's perspective, the job is in limbo.
This usually happens because of:
Worker crash mid-job — an unhandled exception, OOM kill, or container restart while a job is actively processing






