PARA/03_Resources/R001_개발_레퍼런스(참고문서)/트러블슈팅/트러블슈팅 - AWS EC2 메모리 및 디스크 부족 문제 해결.md

트러블슈팅 - AWS EC2 메모리 및 디스크 부족 문제 해결

개요

오늘 간만에 Doo Wiki에 들어가보니 502 Bad Gateway가 날 반겼다.
서둘러 ec2에 접속하여 상황을 확인해보니
AWS EC2 인스턴스에서 메모리 부족과 디스크 100% 사용으로 인해 서비스가 중단되는 심각한 상황이었다
Node.js 애플리케이션을 관리하는 PM2 프로세스가 중단되었고, pm2 ls, pm2 log 등의 명령어가 응답하지 않았다.


문제 증상 (에러 징후)

  1. pm2 ls 실행 시 응답 없음
  2. 서버 응답 지연 및 디스크 사용률 100%
  3. 메모리 부족으로 Node.js "Mark-sweep (reduce)" GC 에러 발생
  4. 디스크 쓰기 대기 (iowait)가 75% 이상으로 증가

1. 시스템 상태 점검 (디버깅 시작)

1-1. 메모리 상태 확인

free -m

결과 예시:

Mem:             949         838          53           0          56          12
Swap:           2047        1973          74

👉 가용 메모리 부족스왑 메모리 거의 소진됨


1-2. 디스크 사용량 확인

df -h

결과 예시:

Filesystem      Size  Used Avail Use% Mounted on
/dev/xvda1      8.0G  8.0G   20K 100% /

👉 디스크 사용률 100%


1-3. 디스크 I/O 상태 확인

iostat -x 1 5

결과 예시:

avg-cpu:  %user   %system %iowait %idle
           28.28    14.14   56.57    0.00

👉 I/O 대기 56% 이상 → 디스크 과부하 발생


2. 문제 해결 (디스크 정리 및 프로세스 관리)

2-1. 디스크 정리

불필요한 로그 파일 삭제

sudo rm -rf /var/log/*.log

PM2 로그 정리

sudo rm -rf /home/ec2-user/.pm2/logs/*
sudo rm -f /home/ec2-user/.pm2/pm2.log

프로젝트 폴더 내 불필요한 파일 삭제

sudo rm -rf /home/ec2-user/DooSyncObsidian/node_modules
sudo rm -rf /home/ec2-user/DooSyncObsidian/.next

2-2. PM2 프로세스 정리 및 재시작

PM2 프로세스 강제 종료

sudo pkill -9 -f pm2

PM2 다시 시작

pm2 kill
pm2 start ecosystem.config.js

2-3. AWS EBS 볼륨 확장 (필요 시)

AWS 관리 콘솔에서 EBS 볼륨 크기를 늘리고, SSH로 접속 후 파일 시스템 확장:

sudo growpart /dev/xvda 1
sudo resize2fs /dev/xvda1

3. 문제 해결 결과 확인

최종 메모리 및 디스크 상태

free -m
df -h

결과 예시:

Mem:             949         231         494           0         223         552
Swap:           2047         207        1840
Filesystem      Size  Used Avail Use% Mounted on
/dev/xvda1      8.0G  3.2G  4.8G  40% /

👉 디스크 사용률 40%로 감소, 메모리 및 스왑 여유 공간 확보


4. 예방 조치 및 설정 최적화

4-1. PM2 메모리 제한 설정 (Node.js 옵션)

pm2 start ecosystem.config.js --node-args="--max-old-space-size=512"

4-2. PM2 자동 실행 설정 (서버 재부팅 시)

pm2 save
pm2 startup

결론: 문제 해결 요약

  1. 디스크 및 메모리 부족 문제 진단

    • free -m, df -h, iostat 명령어로 시스템 상태 점검
  2. 디스크 공간 확보 및 로그 파일 정리

    • 로그 파일, 캐시 파일, 프로젝트 빌드 폴더 삭제
  3. PM2 프로세스 종료 및 재시작

    • pm2 kill, pm2 start ecosystem.config.js 명령어 사용
  4. AWS EBS 볼륨 확장 (필요 시)

    • AWS 관리 콘솔에서 스토리지 용량을 확장

마무리

일단 급하게 rm -rf 로 로그를 지운다는 원시적인 방식으로 해결했으나
조금 불안했다.

안정적으로 서버가 동작할 수 있도록 하려면 어떻게 해야할까?
Best Practice - EC2에서 지속적인 메모리 및 디스크 문제 개선을 위한 방법
이 문제를 방지하기 위한 스왑 메모리 설정, PM2 로그 로테이션, CloudWatch 연동 등 예방적 개선 방법은 [[KnowledgeBase/Blog/Best Practice/Best Practice - EC2에서 지속적인 메모리 및 디스크 문제 개선을 위한 방법]]에서 다룬다.

댓글

첫 번째 댓글을 남겨보세요.