어젯밤 우리 렌더 파이프라인이 이상한 증상을 겪었습니다. ComfyUI는 HTTP에 정상적으로 응답했고, 작업 큐도 움직였지만 GPU는 1%의 부하도 받지 않았습니다. 전체 렌더 작업 세트가 에러 메시지도 없이 그대로 멈춰 있었습니다. 이 노트는 "wedge"라는 증상과 파이프라인에 추가한 자동 회복 계단식 시스템에 대한 이야기입니다.

발견된 wedge 증상

동시에 나타난 세 가지 신호:

  1. 서버 프로세스는 살아있고 모든 엔드포인트에 HTTP 요청에 응답
  2. 작업 큐가 "움직이는 것처럼" 보이지만 렌더 출력이 전혀 없음
  3. 대기 중인 작업이 있음에도 gpu_util이 60초 이상 연속으로 0%

이 증상은 완전히 죽는 것보다 더 위험합니다. 단순히 "응답하는지"만 확인하는 모니터링 시스템은 모든 것이 정상이라고 판단하지만, 실제 생산은 멈춰 있기 때문입니다.

감지 방법: HTTP만 믿지 마세요

중요한 교훈은 헬스 체크가 "서버가 응답하는지"가 아니라 "작업이 흐르는지"를 측정해야 한다는 것입니다. 따라서 gpu_util 모니터링을 추가했습니다 — 큐에 작업이 있지만 gpu_util이 60초 이상 연속으로 0%이면 wedge로 판단하고 즉시 회복 절차를 시작합니다.

COMFY_HEAL 계단식 시스템

wedge가 감지되면 시스템은 단계별로 회복을 시도하며, 각 라운드당 180초의 시간 상한을 설정하여 무한 재시작 루프를 방지합니다:

단계 동작 조건
1 wedge가 걸린 프로세스만 재시작 (PID로 식별, 이름이 아님) 주요 GPU에서 wedge 감지
2 동일 호스트의 백업 GPU로 전환 재시작 후에도 작업이 돌아오지 않음
3 작업 세트 전체를 안전하게 취소하고 팀에 알림 첫 두 단계가 실패

가장 주의해야 할 점은 재시작입니다 — PID로 위치를 식별하여 우리 프로세스만 종료해야 하며, 프로그램 이름으로 종료하면 안 됩니다. 같은 호스트에는 비슷한 이름을 가진 여러 서비스가 있기 때문입니다.

테스트 결과

COMFY_HEAL 계단식 시스템의 selftest 결과
selftest 결과: gpu_util에서 wedge 감지, PID만 재시작 후 GPU 사용률이 96%로 회복
  • 오프라인 selftest 6/6 케이스 통과 (감지, 재시작, 재검사, 백업 전환, 시간 상한, 안전한 취소)
  • 재시작 메커니즘은 실제 프로덕션 클립 이벤트에서 검증됨 — 멈춰 있던 작업이 다시 렌더링되어 정상적으로 방송됨
  • 회복 후 gpu_util이 2분 내에 96%까지 회복
wedge에서 회복된 ComfyUI 화면
시스템이 회복시킨 ComfyUI 화면 — 큐가 계속 진행되고, 그래프가 유지되며, 작업 세트 전체를 다시 시작할 필요 없음

다음 계획

다음 단계는 이 "작업 흐름 측정" 방식의 헬스 체크를 플릿의 다른 서비스에도 적용하는 것입니다. 또한 wedge 발생 주별 통계를 기록하여 이 증상이 특정 유형의 작업과 관련이 있는지 확인합니다 — 다음 Lab Notes에서 계속 다루겠습니다.