PARA/03_Resources/R001_개발_레퍼런스(참고문서)/인프라_네트워크/Best Practice - EC2에서 지속적인 메모리 및 디스크 문제 개선을 위한 방법.md

Best Practice - EC2에서 지속적인 메모리 및 디스크 문제 개선을 위한 방법

개요

트러블슈팅 - AWS EC2 메모리 및 디스크 부족 문제 해결
블로그를 AWS로 직접 운영하다보니 위와같은 문제가 있었다.

처음에는 그냥 크론탭으로다가 매일 로그를 삭제하면 되겠다 싶었는데
이것저것 찾아보니 크론탭은 너무 무식한 방법이라는 것을 깨달았다.

간단 요약하면 아래와 같다.

  1. EC2 리소스 확장
  2. CloudWatch 사용

프리티어를 쓰다보니 아무래도 Production Level보다 조금 더 제한이 있을 수 밖에 없다.
아래는 프리티어 기준에서의 트러블 슈팅이다.

조건

AWS 프리 티어는 **EC2 t2.micro 인스턴스(1 vCPU, 1GB RAM)**와 최대 30GB EBS 스토리지를 무료로 제공한다.
제한된 리소스 환경에서 지속적인 메모리 부족 및 디스크 100% 사용 문제를 관리하기 위해 프리 티어에서 실행 가능한 최적화 방법은 아래와 같다.


1. AWS EC2 설정 최적화

1-1. EC2 스토리지 크기 늘리기 (가능)

AWS 프리 티어에서는 EBS 스토리지 최대 30GB까지 무료로 사용할 수 있다.

✅ 조치:

  1. AWS 관리 콘솔 → EC2볼륨으로 이동
  2. 루트 볼륨 선택 (/dev/xvda)
  3. 작업 → 볼륨 수정을 클릭하여 크기를 16GB 이상으로 확장
    -> 나는 20GB로 확장함

파일 시스템 확장:

sudo growpart /dev/xvda 1
sudo xfs_growfs /
  • 주의 - 콘솔에서 적용 후 몇 분 기다려야함(재부팅은 안해도 됨)

1-2. EC2 스왑 메모리 설정 (가능)

스왑 메모리 생성으로 RAM 부족 문제를 완화할 수 있다.

✅ 조치:

sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile

확인:

free -m

2. PM2 설정 최적화 (가능)

2-1. 메모리 제한 설정

Node.js 애플리케이션이 메모리를 과도하게 사용하지 않도록 PM2 실행 시 메모리 제한을 설정할 수 있다.

✅ 조치:

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

2-2. 자동 재시작 설정

PM2가 메모리 사용량이 설정된 크기를 초과할 경우 자동 재시작하도록 설정할 수 있다.

ecosystem.config.js 예시:

module.exports = {
  apps: [
    {
      name: "DooSyncObsidian",
      script: "./app.js",
      max_memory_restart: "512M", // 512MB 초과 시 재시작
      autorestart: true,
      instances: 1,
      watch: false,
    },
  ],
};

2-3. PM2 로그 관리 자동화

로그가 계속 쌓이면 디스크 공간이 부족해지므로 PM2 Logrotate 모듈을 설치할 수 있다.

✅ 조치:

pm2 install pm2-logrotate
pm2 set pm2-logrotate:max_size 10M  # 로그 파일 최대 크기
pm2 set pm2-logrotate:retain 15      # 최근 로그 15개 유지
pm2 set pm2-logrotate:compress true # 압축 저장
pm2 set pm2-logrotate:rotateInterval '0 0 * * *' # 매일 자정 회전

3. AWS CloudWatch 및 모니터링 설정 (가능)

(아직 안함 - 이번주 안에 해봐야지)

AWS 프리 티어에서는 CloudWatch 무료 계층이 제공된다
EC2 메모리, CPU, 디스크 사용량을 모니터링하고 알림 설정을 추가해야한다.

✅ 조치:

  1. AWS 관리 콘솔 → CloudWatch경보 만들기
  2. 지표 선택 → EC2 → 인스턴스 상태 확인
  3. CPU 사용률, 디스크 사용량 기준으로 알림 설정

결론: 프리 티어에서 실행 가능한 해결 방안 요약

AWS 프리 티어 내 설정 가능 항목:

  1. EC2 스토리지 확장: 최대 30GB까지 EBS 크기 늘리기
  2. 스왑 메모리 생성: 메모리 부족 방지 (2GB 설정)
  3. PM2 설정 최적화: 메모리 제한 및 로그 자동 회전 설정
  4. CloudWatch 모니터링: 알림 및 자동 조치 설정

이 모든 설정은 AWS 프리 티어에서 실행 가능하며, Node.js 애플리케이션이 EC2 t2.micro 인스턴스에서 안정적으로 실행되도록 관리할 수 있다.
실제 EC2 서버가 디스크 100% 및 메모리 부족으로 502 에러가 발생했던 실 사례는 [[KnowledgeBase/Blog/트러블 슈팅/트러블슈팅 - AWS EC2 메모리 및 디스크 부족 문제 해결]]에서 확인할 수 있다.

댓글

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