콘텐츠로 이동

중단된 작업

Source URL: https://docs.bullmq.io/guide/workers/stalled-jobs

NodeJS는 (일반적으로) 단일 스레드이며 비동기 작업을 처리하기 위해 이벤트 루프로 구성되어 있기 때문에, CPU를 장시간 점유하지 않도록 process 함수를 신중하게 작성해야 합니다.

작업이 워커에 도달해 처리를 시작하면, BullMQ는 다른 클라이언트나 워커가 이 작업을 수정하지 못하도록 해당 작업에 lock을 설정합니다. 동시에 워커는 자신이 여전히 해당 작업을 처리 중임을 BullMQ에 주기적으로 알려야 합니다.

{% hint style=“info” %} 이 주기는 stalledInterval 설정으로 구성되며, 일반적으로는 수정할 필요가 없습니다. {% endhint %}

하지만 CPU가 매우 바쁜 경우(프로세스가 CPU 집약적인 경우), 워커가 lock을 갱신하고 큐에 작업을 계속 처리 중이라고 알릴 시간이 없을 수 있으며, 그 결과 작업이 stalled로 표시될 가능성이 큽니다.

중단된 작업은 다시 대기 상태로 이동되어 다른 워커가 다시 처리하게 되며, 또는 최대 중단 횟수에 도달했다면 failed 집합으로 이동됩니다.

따라서 이런 종류의 문제를 피하려면 워커가 NodeJS 이벤트 루프에 제어를 충분히 자주 반환하도록 보장하는 것이 매우 중요합니다.