| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
- amazon ecs
- 구조 패턴
- Playwright
- leetcode
- 커머스
- 디자인 패턴
- study
- ssh
- 지표
- 티스토리챌린지
- terraform
- Til
- github
- MAPF
- 실용주의 프로그래머
- 신혼 여행
- Rust
- 오블완
- 논문 정리
- 생성 패턴
- DevOps
- Go-lang
- 경로 계획 알고리즘
- AWS 비용 절감
- 회고
- 14일 공부
- docker
- PostgreSQL
- AWS
- 청첩장 모임
- Today
- Total
밤 늦게까지 여는 카페
[Amazon ECS] 갑자기 137 종료 코드를 반환하면서 실행 중인 ECS Fargate Task가 종료된다;;; feat. Docker Container 종료 코드 본문
[Amazon ECS] 갑자기 137 종료 코드를 반환하면서 실행 중인 ECS Fargate Task가 종료된다;;; feat. Docker Container 종료 코드
Jㅐ둥이 2024. 11. 7. 23:01안녕하세요.
오늘은 Amazon ECS Fargate를 사용하면서 갑작스럽게 Fargate Task가 종료되었던 사례를 기록하려고 합니다.
1. 발단: QA 환경 기능 이상
저희는 안정적인 서비스 개발 및 운영을 위해서 4개의 스테이지를 운영하고 있습니다.
- DEV(개발): 새로운 기능을 개발하기 위해서 자유롭게 사용하는 스테이지
- QA(테스트): DEV에서 개발된 기능을 테스트 하기 위해 사용하는 스테이지로 테스트 팀이 사용
- STG(운영과 똑같은 버전): 테스트 팀이 검수한 버전을 운영에 배포하기 전에 마지막으로 확인하는 스테이지
- PROD(운영): 고객이 사용하는 스테이지
그런데 갑자기 QA 환경에서 서비스가 정상적으로 동작하지 않는다는 이슈를 공유 받았습니다.
OpenSearch를 봐도 패닉 로그는 없었습니다.
뭐가 문제지 싶은 순간에 Amazon ECS 콘솔에서 태스크가 계속해서 종료되고 있는 것을 확인했습니다!
'패닉 없이 태스크가 계속 종료된다고?' 속으로 질문하며 종료된 태스크를 눌러보니 137 종료 코드를 확인할 수 있었습니다.

2. 137 종료 코드 - Out Of Memry
컨테이너 세부 정보에 종료 코드 137과 함께 OutOfMemoryError가 적혀 있어서
프로세스의 메모리가 부족해서 발생한 문제인 것을 알 수 있었습니다.
덕분에 QA 환경에서 메모리가 과다하게 사용되고 있는 원인을 찾았고 적절한 조치를 취할 수 있었습니다.
3. 종료 코드에 대해서 알아보자
문제가 해결되고 여유가 생기니 137 종료 코드가 무슨 의미를 가지고 있는지 궁금해지더라고요?
찾아본 내용은 다음과 같습니다.
- 일반적으로 128(int 값으로 보면 0)은 정상 종료, 그 외의 값은 실패를 의미합니다.
- 참고: https://www.gnu.org/software/libc/manual/html_node/Exit-Status.html
널리 사용되는 표준은 없습니다.
어플리케이션마다 종료 코드를 다르게 관리하더라고요.
그러면 도커 컨테이너의 종료 코드는 어떨까요?
도커 컨테이너의 종료 코드는 125, 126, 127가 정의되어 있고,
그 외의 종료 코드에 대해서는 컨테이너에서 실행되는 어플리케이션의 종료 코드를 반환한다고 합니다.
- 125: 도커 데몬에서 에러가 발생했을 때 반환됩니다

- 126: 주어진 명령어를 실행하지 못했을 때 반환됩니다

- 127: 주어진 명령어를 실행 환경에서 찾지 못했을 때 반환됩니다.

아하, 137 종료 코드는 우리가 실행한 명령어에서 발생한 것이로군요!
저희는 도커 이미지의 용량을 최적화 하기 위해서 alpine linux를 사용하고 있습니다.
그리고 alpine linux에서는 /bin/sh를 통해서 명령어가 실행됩니다.
/bin/sh를 통해 실행된 프로세스는 SIGKILL을 받았을 때 137 종료 코드를 반환합니다.
🎁다른 Amazon ECS 포스팅들 🎁
- [Amazon ECS] Fargate 태스크 public ip 없이 사용하기 - IPv4 주소 1개당 월 3.6달러 무시하다가는 돈 줄줄 샙니다...
- [Amazon ECS] Fargate 플랫폼 업데이트로 인한 Amazon ECS 작업 자동 배포 - 인프라 관리는 제대로 해야 합니다... ㅜ
- [Amazon ECS] 무중단 배포 이뤄내기 - 제발 장기 실행 태스크(long running tasks)는 만들지 마세요...
'aws' 카테고리의 다른 글
| [AWS 비용 절감] crontab을 이용해서 주말에는 서버 자동으로 내리기 (4) | 2025.02.16 |
|---|---|
| [2025.02.06] Amazon S3 Glacier Deep Archive 복구 경험 (1) | 2025.02.09 |
| [2024-10-08] 드디어 서울 리전에 Amazon Elasticache Valkey도 왔네요 + 네트워크 최적화 노드 언제 추가되나요 ㅜㅠ (0) | 2024.10.16 |
| AWS Lambda python3.8 런타임 지원 종료로 인한 런타임 변경 작업기 - 고마워요 AWS SAM CLI! (0) | 2024.10.13 |
| Amazon ECR에서 태그 없는 이미지들 제거하기 - 용량만 축내고 있는 이미지들 없애버리죠! (1) | 2024.10.05 |
