Infra/🏘️AWS

[AWS] Amazon EC2 프리티어 서버 메모리 부족 문제 해결

seungwookim 2021. 11. 3. 22:53

🚀 발단

현재 진행 중인 '착오송금 반환서비스' 앱의 API 서버는 amazon ec2 프리티어 계정을 사용하고 있다.

가난한 대학생이기에 유료 전환은 생각해보지 않았고, 지금 띄운 것이 그리 거대한 서버가 아니기 때문에 문제가 없을 거라 생각했다.(그러길 바랬다.)

 

그런데 웬걸, 서버를 띄운지 일주일이 채 되지 않아 앱에서 서버 연결이 되지 않는 문제가 발생하였다.

 

문제 해결을 위해 Amazon EC2 Management Console에 접속하여 무슨 일이 벌어진 건지 원인을 찾아 나섰다.

 

 

상태 검사 결과가 심상치 않다.

 

 

시스템 상태 체크는 통과했는데 인스턴스 상태에 문제가 발생했다.

 

 

메모리 부족으로 프로세스가 종료되었다고 한다. 프리 티어는 가용 메모리가 1GB이기 때문에 서버가 얼마 못 버티고 터진 거다. 

 

 

💪 문제 해결

스왑 공간을 사용하여 물리적 RAM 크기의 한계를 극복해보자.

 

https://aws.amazon.com/ko/premiumsupport/knowledge-center/ec2-memory-swap-file/

 

스왑 파일을 사용하여 Amazon EC2 인스턴스의 스왑 공간으로 메모리 할당

1.    dd 명령을 사용하여 루트 파일 시스템에 스왑 파일을 생성합니다. 명령에서 bs는 블록 크기이고 count는 블록 수입니다. 스왑 파일의 크기는 dd 명령의 블록 크기 옵션에 블록 수 옵션을 곱

aws.amazon.com

위 레퍼런스에 잘 설명되어 있지만 블로그에도 기록해보자.

 

 

1.

dd 명령을 사용하여 루트 파일 시스템에 스왑 파일을 생성한다. 명령에서 bs는 블록 크기이고 count는 블록 수이다.

스왑 파일의 크기는 dd 명령의 블록 크기 옵션에 블록 수 옵션을 곱한 값으로, 값을 조정하여 원하는 스왑 파일 크기를 결정할 수 있다.

 

2GB(128M*16) 크기의 스왑 파일을 생성하였다.

$ sudo dd if=/dev/zero of=/swapfile bs=128M count=16

 

2.

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

$ sudo chmod 600 /swapfile

 

3.

 Linux 스왑 영역을 설정한다.

$ sudo mkswap /swapfile

 

4.

스왑 공간에 스왑 파일을 추가하여 스왑 파일을 즉시 사용할 수 있도록 한다.

$ sudo swapon /swapfile

 

5.

프로시저가 성공적인지 확인한다.

$ sudo swapon -s

 

6.

부팅 시 스왑 파일을 활성화하기 위해 /etc/fstab 파일을 편집한다.

편집기에서 파일을 연다.

$ sudo vi /etc/fstab

파일 끝에 다음 줄을 새로 추가하고 파일을 저장한 다음 종료한다.

/swapfile swap swap defaults 0 0

 

 

 

7.

free 명령어로 스왑 공간이 활용되고 있는지 최종적으로 확인한다.

 

 

스왑 공간을 사용하니 속도는 느리겠지만 더 이상 서버가 터지지 않기를 바란다. 👋