트러블슈팅 - AWS EC2 메모리 및 디스크 부족 문제 해결
개요
오늘 간만에 Doo Wiki에 들어가보니 502 Bad Gateway가 날 반겼다.
서둘러 ec2에 접속하여 상황을 확인해보니
AWS EC2 인스턴스에서 메모리 부족과 디스크 100% 사용으로 인해 서비스가 중단되는 심각한 상황이었다
Node.js 애플리케이션을 관리하는 PM2 프로세스가 중단되었고, pm2 ls, pm2 log 등의 명령어가 응답하지 않았다.
문제 증상 (에러 징후)
pm2 ls실행 시 응답 없음- 서버 응답 지연 및 디스크 사용률 100%
- 메모리 부족으로 Node.js "Mark-sweep (reduce)" GC 에러 발생
- 디스크 쓰기 대기 (
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/*.logPM2 로그 정리
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/.next2-2. PM2 프로세스 정리 및 재시작
PM2 프로세스 강제 종료
sudo pkill -9 -f pm2PM2 다시 시작
pm2 kill
pm2 start ecosystem.config.js2-3. AWS EBS 볼륨 확장 (필요 시)
AWS 관리 콘솔에서 EBS 볼륨 크기를 늘리고, SSH로 접속 후 파일 시스템 확장:
sudo growpart /dev/xvda 1
sudo resize2fs /dev/xvda13. 문제 해결 결과 확인
최종 메모리 및 디스크 상태
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결론: 문제 해결 요약
-
디스크 및 메모리 부족 문제 진단
free -m,df -h,iostat명령어로 시스템 상태 점검
-
디스크 공간 확보 및 로그 파일 정리
- 로그 파일, 캐시 파일, 프로젝트 빌드 폴더 삭제
-
PM2 프로세스 종료 및 재시작
pm2 kill,pm2 start ecosystem.config.js명령어 사용
-
AWS EBS 볼륨 확장 (필요 시)
- AWS 관리 콘솔에서 스토리지 용량을 확장
마무리
일단 급하게 rm -rf 로 로그를 지운다는 원시적인 방식으로 해결했으나
조금 불안했다.
안정적으로 서버가 동작할 수 있도록 하려면 어떻게 해야할까?
Best Practice - EC2에서 지속적인 메모리 및 디스크 문제 개선을 위한 방법
이 문제를 방지하기 위한 스왑 메모리 설정, PM2 로그 로테이션, CloudWatch 연동 등 예방적 개선 방법은 [[KnowledgeBase/Blog/Best Practice/Best Practice - EC2에서 지속적인 메모리 및 디스크 문제 개선을 위한 방법]]에서 다룬다.
댓글
첫 번째 댓글을 남겨보세요.