3.1 KiB
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 |
|
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 — 확인
- ERROR log에서
JOB_TIMEOUT라인 확인:job_name, 마지막 단계, 소요 시간 추출 - timeout이 정상 실행 중 발생인지, graceful-shutdown(배포/스케일다운) 중 interrupt인지 구분
- 해당 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}정상 비율 회복 - 멱등 재시도분의 부작용 중복 없음 확인
7. Related
- error-codes.yaml rows:
JOB_TIMEOUT(TRANSIENT_DEPENDENCY, 500, retryable=true, retry_after 10s) - metrics.yaml:
job.retry.total{job_name, outcome} - 코드:
app-bootstrapasync/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 예산 확정 시 보강 필요.