본문 바로가기
Programming

AWS EC2 프리티어 메모리 부족 서버 터짐 해결방법 swap memory 사용하는 방법

by 하하호호 2022. 1. 25.
반응형

 

How to append additional memory to AWS Freetier EC2?

 

AWS EC2 프리티어 서버가 계속해서 터진다면

99%는 메모리 부족문제라고 볼 수 있다. 프리티어로

제공되는 서버 컴퓨터의 스펙이 너무 낮기 때문에

서버에 최적화된 프로그래밍을 배울 수 있다. ㅋㅋ

 

 

AWS EC2 프리티어 메모리 부족문제 

 

AWS 서버는 프리티어로 사용가능하지만, 부족한

스펙으로 일반적인 프로그램을 돌리기에는 힘든경우가

많다. 메모리가 부족하거나, 용량이 부족하하거나,

부족한게 투성이다.

 

그럼에도 불구하고 초기 서비스를 운영하고 테스트

해보기에는 안성맞춤이기에, 프리티어를 어떻게든

최적화해서 사용해야 한다.

 

 

AWS 프리티어에서 가장 큰 문제점은 메모리 부족현상이다.

기본적으로 프리티어에서 제공하는 AWS EC2 스펙은

30GB SSD와 1GB 메모리를 가지고 있다. SSD는 그럭적럭

사용할만한데 문제는 메모리다. 기본 서버 OS가 돌아가기 위해

필요한 메모리가 500MB가까이 되기 때문에 작은 프로그램

하나만 돌리더라도 서버가 뻗어버리는 현상이 나온다.

 

물론 추가금액을 지불하고 auto-scale을 사용할 수도 있겠지만,

이건 금액이 추가되니 차선이다. 최선책은 추가로 사용할 수 있는

메모리를 구하는 것이다. 그래서 나온 개념이 SWAP 메모리다.

 

 

 

 

SWAP 메모리

swap 메모리는 리눅스에서 swap 공간을 사용하는 메모리를 의미한다.

만약 OS에서 메모리를 full로 사용하고 있다면, 사용하지 않는 메모리 안의

페이지를 하드드라이브에 저장하게 되는데, 이게 SWAP 메모리의 기본

개념이다.

 

메모리의 대체개념으로 사용가능하지만, 메모리를 100% 대체할 수는 없다.

사용하지 않는 메모리 내의 페이지만 보관하는 용도로 사용해야 한다.

그 이유는 속도 때문이다. CPU에서 I/O 작업을 할 때 메모리와 일반 하드드라이브의

I/O 속도 개념이 다르기 때문이다. 

 

일반적인 SSD(Solid State Drive)의 속도는 450MB/s를 내지만, CPU와

직접 paging 작업을 하는 RAM 메모리의 속도는 12,800MB/s의 속도를 

낸다. 무려 30배 이상의 차이가 나는 것이다. 항상 대체제의 개념으로 

SWAP을 사용해야 한다.

 

 

 

 

SWAP 메모리 용량 설정

재미있는게, AWS에서도 EC2 프리티어에서 프로그램을 돌리기에 메모리가 

부족하다는 걸 알고 있다는 것이다. AWS에서도 SWAP 공간을 사용해서 메모리를

추가로 확보하는 방법을 안내하고 있다.

 

 

 

 

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

 

SWAP Memory 할당용량과 할당방법

SWAP Memory를 사용할 때 기억해야 할 것은 용량과 방법이다.

SWAP Memory를 사용하기 위해서는 SWAP Space를 마련해야 한다.

SWAP Space을 마련하는 방법은 SWAP partitions을 사용하는 방법과

SWAP File을 사용하는 방법이 있다. 

 

또한 SWAP Space를 설정해줘야 하는데, 물리적인 RAM의 용량에 비례

해서 SWAP Space를 마련해야 한다. 제약사항으로는 최소 32MB이상은

마련되야 한다는 것이다.

 

RAM SWAP Space
RAM <= 2GB  RAM 용량의 2배(최소 32MB)
2GB < RAM < 32GB 4GB+(RAM-2GB)
RAM >= 32GB RAM 용량의 1배

 

 

 

 

AWS EC2 우분투 리눅스 SWAP Space 설정

dd 명령어로 SWAP 메모리를 할당한다.

SWAP Space의 기본 용량단위는 128M다. 
AWS 프리티어의 경우 RAM이 1GB기 때문에 2GB의
SWAP Space를 할당하기 위해서는 count=16으로 설정해준다.
1
sudo dd if=/dev/zero of=/swapfile bs=128M count=16
cs

 

스왑 파일 Read / Write 권한을 변경한다.
1
$ sudo chmod 600 /swapfile
cs

 

 Linux SWAP File을 사용해서 영역을 설정한다.
1
$ sudo mkswap /swapfile
cs

 

SWAP Space에 SWAP File을 추가해준다.
1
$ sudo swapon /swapfile
cs

 

추가된 SWAP 영역을 확인한다
1
$ sudo swapon -s
cs

 

서버를 Reboot 할 경우 SWAP을 자동으로 활성화 하기 위해
/etc/fstab 파일을 열어서 해당 내용을 추가해준다.
1
$ sudo vi /etc/fstab

/swapfile swap swap defaults 0 0

cs

 

 

ㄴㅇ

이제 SWAP Space 설정이 완료되었다.

free -h 명령어로 현재 메모리를 확인하면 정상적으로 2GB의

SWAP 메모리 영역이 생성되었고, 실제로 사용되지 않는

RAM의 page들이 저장되고 있는 것을 확인할 수 있다.

 

최소한 서버가 뻗어서 인스턴스 재시작을 해주지 않기 

위해서 AWS EC2 프리티어에서 SWAP Memory 사용은

선택이 아닌 필수다.

 

 

 

 

 

 

 

Django AWS 배포하기 1

step 1 기존 프로젝트 정리 pip freeze > requirements.txt 현재 프로젝트에서 필요한 모듈들을 requirements.txt 파일에 저장한다. 작업을 완료한 프로젝트 파일을 Git에 push해준다. AWS를 통해 배포하는 작업..

incomeplus.tistory.com

 

 

Django AWS 배포하기 2

requirements.txt 현재 프로젝트에서 필요한 모듈들을 requirements.txt 파일에 저장한다. 작업을 완료한 프로젝트 파일을 Git에 push해준다. AWS를 통해 배포하는 작업.." data-og-host="incomeplus.tistory.com"..

incomeplus.tistory.com

 

 

Django AWS 배포하기 3

requirements.txt 현재 프로젝트에서 필요한 모듈들을 requirements.txt 파일에 저장한다. 작업을 완료한 프로젝트 파일을 Git에 push해준다. AWS를 통해 배포하는 작업.." data-og-host="incomeplus.tistory.com"..

incomeplus.tistory.com

 

 

Django AWS 배포하기 4

Django AWS 배포하기 3 requirements.txt 현재 프로젝트에서 필요한 모듈들을 requirements.txt 파일에 저장한다. 작업을 완료한 프로젝트 파일을 Git에 push해준다. AWS를 통해 배포하는 작업.." data-og-host="i..

incomeplus.tistory.com

 

반응형

댓글