피드로 돌아가기
Dev.toInfrastructure
원문 읽기
SIGTERM 처리 및 stopTimeout 최적화로 빌드 실패율 2%에서 0.1% 미만으로 감소
The SIGTERM our build workers ignored, and the 90s that fixed it
AI 요약
Context
ECS 기반 Buildkite 워커의 Scale-in 및 배포 시 진행 중인 빌드 작업이 강제 종료되는 문제 발생. Shell Wrapper 사용으로 인해 PID 1이 SIGTERM 신호를 흡수하여 자식 프로세스인 빌드 에이전트에 전달되지 않는 구조적 결함 확인.
Technical Solution
- ENTRYPOINT 변경을 통한 Shell Wrapper 제거 및 빌드 에이전트의 PID 1 지정으로 SIGTERM 직접 수신 구조 설계
- ECS task definition의 stopTimeout을 30s에서 120s로 상향하여 작업 완료를 위한 Grace Period 확보
- --cancel-grace-period 설정을 통한 SIGTERM 수신 시 신규 작업 거부 및 기존 작업 완료 후 종료 로직 구현
- --disconnect-after-idle-timeout 적용으로 유휴 상태 워커의 신속한 종료를 유도하여 Scale-in 효율성 유지
- Bifrost 사이드카 프로세스에 동일한 SIGTERM 플러시 로직을 적용하여 인플라이트 요청 유실 방지
실천 포인트
1. 컨테이너 ENTRYPOINT 설정 시 Shell Form이 아닌 Exec Form을 사용하여 PID 1 신호 전달 체계 확인
2. 애플리케이션의 Graceful Shutdown 로직과 인프라의 stopTimeout 설정 값이 일치하는지 검토
3. 유휴 상태와 작업 상태의 종료 전략을 분리하여 배포 속도와 안정성 간의 Trade-off 최적화
4. Game Day 테스트를 통해 강제 종료 상황에서도 작업 완료가 보장되는지 정기적으로 검증