개발 서버 환경에서 실행 중인 EC2 인스턴스가 약 48시간(2일) 간격으로 주기적으로 비정상 종료되고, Auto Scaling Group(ASG)에 의해 재생성되는 현상이 발생했습니다.
ASG 활동 이력(Activity History)을 분석한 결과, 인스턴스 실행 후 약 2일이 경과하면 종료되는 패턴이 일정하게 반복됨을 확인했습니다.
| 날짜 (UTC) | 작업 유형 | 인스턴스 ID | 비고 |
|---|---|---|---|
| 2026-02-05 10:21 | Launch | i-0f75... | 생성 |
| 2026-02-07 11:55 | Terminate | i-0f75... | 약 2일 후 종료 |
| 2026-02-07 11:55 | Launch | i-0a97... | 재생성 |
| 2026-02-09 06:20 | Terminate | i-0a97... | 약 2일 후 종료 |
| 2026-02-09 06:20 | Launch | i-0dc7... | 재생성 |
| 2026-02-11 11:49 | Terminate | i-0dc7... | 약 2일 후 종료 |
단순한 설정 오류가 아닌, 리소스 누적에 의한 장애로 판단하여 다음과 같은 흐름으로 원인을 좁혔습니다.
가설을 검증하기 위해 기존 t3.micro 환경의 메모리 상태를 정밀 분석했습니다.
total used free shared buff/cache available
Mem: 988 842 41 12 104 73
Swap: 1024 512 512
S0 S1 E O M YGC FGC
0.00 0.00 85.12 92.45 88.31 120 8
물리적 메모리 한계를 극복하기 위해 인스턴스 유형을 t3.small(2GB RAM)로 변경했습니다.
total used free shared buff/cache available
Mem: 1910 790 469 2 815 1120
Swap: 1023 0 1023
물리 메모리는 늘어났으나, JVM 옵션을 따로 설정하지 않아(Default) Java는 여전히 보수적인 메모리 정책을 유지하고 있었습니다.
인스턴스 스펙업의 효과를 극대화하기 위해, 물리 메모리의 50%를 힙 메모리로 고정 할당하는 최적화 설정을 적용했습니다.
[변경 전 (Default)]
nohup java -jar app.jar ...
[변경 후 (Optimized)]
nohup java -Xms1024m -Xmx1024m -XX:+UseG1GC -XX:MaxMetaspaceSize=256m -jar ...
-Xms1024m -Xmx1024m으로 1GB를 확보하여 비용을 지불한 자원을 100% 활용.-Xms)로 트래픽 급증 시에도 할당 지연 방지.최적화 설정 배포 후 시스템 상태를 최종 점검했습니다.
jstat -gc <PID> 1000 5
결과:
S0C S1C S0U S1U EC EU OC OU
0.0 29696.0 0.0 29696.0 280576.0 246784.0 738304.0 14839.0
top 결과:
PID USER RES SHR S %CPU %MEM
3427 ubuntu 667680 25980 S 0.0 34.1
free -m 결과:
total used free shared buff/cache available
Mem: 1910 1069 158 2 846 840
t3.micro의 메모리 고갈 및 스왑 문제를 t3.small 도입으로 해결했습니다.Xms/Xmx 튜닝을 통해 늘어난 자원을 애플리케이션이 온전히 사용하도록 설정했습니다.