개발

AWS EC2 메모리 부족을 스왑 메모리로 해결하기

모달조아 2023. 6. 12. 18:07

개요

EC2 에 접속 후 docker 환경에서 프로젝트 jar 파일과 MySQL 을 실행시킨 후 MySQL 에 접속하려는 순간 EC2 가 멈춰버렸다.

현재, AWS 프리티어 계정으로 EC2 micro 를 사용하고 있는데, RAM 이 무려 1GB 다. RAM 에 비해 실행하는 어플리케이션이 필요한 메모리가 더 커서 서버가 터진 것으로 추측했다.

메모리 부족 시 CPU 에서 스왑 작업을 시행하기 때문에 CPU 사용률이 늘어나게 되는데 서버가 터진 시점의 CPU 사용량을 보면 급격하게 올라가는 것을 볼 수 있다.

 

해결 방안

크게 2가지 방법이 있다. 첫번째는, 램을 증설하는 것이고 두번째는 스왑 공간을 사용하는 것이다.

첫번째 방법은 현재 비용 문제때문에 프리티어를 사용하는 것이니 배제하기로 하고, 두번째 방법인 스왑 공간을 사용해보자.

 

스왑 공간을 이용한 해결 과정

스왑 공간이란 메모리가 부족할 때 사용할 디스크의 공간을 의미한다. 리눅스 홈페이지애서는 스왑 공간이 메모리의 2~3배 정도가 적당하다고 하는데, 나의 경우는 1GB 이니까 2GB 로 설정하기로 결정했다.

스왑 파일을 만드는 과정은 AWS 홈페이지를 참고하였다.

1. 스왑 파일 생성

 sudo dd if=/dev/zero of=/swapfile bs=128M count=16
  • dd : 파일 관련 유닉스 명령어
  • /dev/zero : 데이터 스토리지 초기화 관련파일
  • bs : 블록 크기 지정
  • count : 블록 갯수

128MB 의 공간을 16개 할당하여 2GB 정도를 할당하였다.

 

2.  스왑 파일의 읽기 및 쓰기 권한 업데이트

sudo chmod 600 /swapfile

 

3. Linux 에서 스왑 파일을 추가할 스왑 공간을 설정

sudo mkswap /swapfile

 

4. 스왑 공간에 스왑 파일을 추가하여 스왑 파일을 사용 가능하게 함

sudo swapon /swapfile

 

5.  /etc/fstab 파일을 편집하여 부팅 시 스왑 파일을 시작

# 편집기로 파일을 열고
sudo vi /etc/fstab

# 맨 끝에 추가해준다
/swapfile swap swap defaults 0 0

etc/fstab는 파일 시스템 정보를 저장하는 곳이다. 

/swapfile을 스왑 파티션으로 설정하고, 부팅시 자동으로 마운트하도록 설정하였다.

 

마무리

swap 메모리가 2GB 가량 생긴 것을 확인할 수 있다.

다만, swap 메모리를 할당하는 것이 근본적인 해결책은 아니다. 결국 디스크를 이용하는 것이기에 메모리보다 느리고 I/O 작업이 자주 일어나게 된다면 성능이 좋지 않을 것이다.