Files

3.1 KiB

title, category, error_codes, severity, owner, last_updated, status
title category error_codes severity owner last_updated status
Runbook — background job timeout TRANSIENT_DEPENDENCY
JOB_TIMEOUT
P2 oncall 2026-06-13 stub

Runbook: background job timeout (runbook://job/timeout)

1. Trigger

이 runbook은 다음 alert에서 발동됩니다.

  • alert name: job_timeout
  • alert payload 필수 field: error.code=JOB_TIMEOUT, job_name, correlation_id, runbook_link
  • 임계: job.retry.total{outcome=RETRY} 급증 또는 graceful-shutdown 중 in-flight job interrupt 발생
  • 연관: shutdown phase에서 19s await 초과로 interrupt된 job (D8)

2. First Response (10분 이내)

Step 1 — 확인

  1. ERROR log에서 JOB_TIMEOUT 라인 확인: job_name, 마지막 단계, 소요 시간 추출
  2. timeout이 정상 실행 중 발생인지, graceful-shutdown(배포/스케일다운) 중 interrupt인지 구분
  3. 해당 job이 멱등(retry-on-next-cycle 안전)인지 확인 — 비멱등이면 §4에서 신중히 처리

Step 2 — 임시 격리

  • shutdown 중 interrupt면: 다음 기동 시 재시도 대상인지(멱등 전제) 확인, 중복 부작용 여부 점검
  • 정상 실행 중 timeout이면: 해당 job의 외부 의존성(DB/HTTP) 지연 여부 확인

3. Diagnosis

  • log query: {service="app"} | error.code="JOB_TIMEOUT" | stats count by job_name
  • metric panel: job.retry.total{job_name, outcome}
  • 가능한 원인 우선순위:
    • 외부 의존성(DB lock / 느린 HTTP) 지연으로 job p99 상승
    • job 작업량 증가로 단일 cycle이 19s 예산 초과 (D8 — interrupt 노출)
    • interrupt 미반응 blocking call(JDBC 등) → awaitTermination 초과 (K8S-POD-LC-C2 SIGKILL 경로)

4. Mitigation

  • 단기: 의존성 회복 / job 입력 배치 크기 축소
  • job p99가 구조적으로 19s를 넘으면: 작업을 분할하거나, grace period 연장 검토(parent project 운영 계약 소유자 승인 필요 — OUT_OF_BRANCH_SCOPE)
  • 비멱등 job이 재시도로 중복 부작용을 내면 멱등키/dedupe 도입 우선

5. Escalation

  • 의존성 지연이 근본 원인이면 해당 의존성 오너에게 escalate
  • shutdown 예산(20s) vs k8s terminationGracePeriodSeconds(30s) 정합 이슈면 플랫폼/런타임 오너에게 escalate

6. Recovery / Verification

  • 회복 확인: JOB_TIMEOUT 신규 발생 멈춤, job.retry.total{outcome=SUCCESS} 정상 비율 회복
  • 멱등 재시도분의 부작용 중복 없음 확인
  • error-codes.yaml rows: JOB_TIMEOUT (TRANSIENT_DEPENDENCY, 500, retryable=true, retry_after 10s)
  • metrics.yaml: job.retry.total{job_name, outcome}
  • 코드: app-bootstrap async/AsyncExecutorConfig(awaitTermination 19s — D8 graceful shutdown)
  • env: APP_SERVER_SHUTDOWN_TIMEOUT(owner: feature-env-driven-runtime-configuration D2)
  • 관련 runbook: job-executor-rejected, job-dead-letter
  • 관련 branch: feature-background-job-async-contract (D4 retry / D8 shutdown)

Stub 상태 안내: 이 runbook은 skeleton 단계의 stub. 실제 retry carrier·job p99·shutdown 예산 확정 시 보강 필요.