aws 프리티어를 사용하여 토이 프로젝트 작업 도중..

jwt 토큰 저장소로 쓰기 위해 redis를 도입하고 얼마 지나지 않아 ec2가 굉장한 빈도로 뻗는 현상이 발생했었다.

 

원인은 아마도 프리티어(마이크로)의 작고 귀여운 메모리(1GB) 때문으로 추정되었고

프론트하는 친구의 한숨 소리를 들으며 미치고 팔짝 뛰겠는 마음을 안고 구글을 뒤져보니

대부분 이런 문제를 해결하기 위해 스왑 메모리를 설정해준다는 것 같았다.  

 

스왑 메모리란?

- 시스템에 메모리가 부족할 경우에 하드 디스크의 일부 공간을 활용하여 계속 작업을 도와주는 영역이다. 메모리 공간 부족 방지를 위한 임시 방편이다.

- 하드 디스크의 일부를 RAM처럼 사용할 수 있게 만들어준다. 

- 메모리가 부족할 때, 메모리상에 적재된 프로그램 중 지금 당장 필요하지 않은 프로그램 데이터를 하드 디스크에 옮겨 메모리 공간을 확보하는 것이다. 

- RAM 용량이 가득 찬 경우 하드 디스크 공간을 메모리 공간처럼 교환(swap)하여 사용하는 것이다.

- 스왑 공간을 RAM 대체제로 생각하면 안된다. (SWAP 메모리 사용량이 많을 경우 메모리 증설을 고려해보는 게 좋다.)

- 하드 드라이브상에 위치하므로 당연히 RAM에 접근하는 것보다 느리다. 비상용으로 만드는 것이다.

(cpu와 직접 paging 작업을 하는 ram 메모리의 속도와 ssd의 속도는 30배 이상의 차이가 날 수 있다. 항상 비상 대체제 개념으로 swap을 사용해야 한다.)

 

즉, 스왑 메모리를 설정하면 

RAM이 부족할 때 우선 당장 필요하지 않은 데이터들을 하드 디스크 공간으로 옮겨 이용하고 메모리에 다시 여유가 생기면 하드디스크에서 다시 메모리로 옮겨오게 된다. 

 

 

장점은 RAM이 가득 찼을 때 보조 공간을 제공한다는 것이고

단점은 swap 파티션 크기만큼의 하드 디스크 공간을 차지하게 된다는 것이다. 

 

또한 스왑 활용도에 따라 항상 성능을 좋게 해주는 것은 아니므로, 적절한 상황에 활용해야한다.

 

설정 방법

먼저 적절한 SWAP 메모리 용량을 알아야 한다.

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

 

우분투 기준 SWAP Space 설정 명령어

RAM이 1GB인 AWS 프리티어를 기준으로 swap space를 2gb로 잡아주기로 하겠다.

 

SWAP 메모리 할당

* 명령어 입력 후 완료되는데까지 시간이 좀 걸린다. 차분하게 기다리자.

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

bs : swap space의 용량단위. 자신이 원하는 대로 설정해주면 되는 듯 하다. 

count : 용량을 얼마나 설정할 것인지. bs * count 만큼의 공간이 swap space 크기로 잡히게 된다. 

 

 

스왑 파일 Read/Write 권한 변경

sudo chmod 600 /swapfile

Linux SWAP File을 사용해서 영역을 설정한다.

sudo mkswap /swapfile

SWAP Space에 SWAP File을 추가해준다.

sudo swapon /swapfile

추가된 SWAP 영역을 확인한다.

sudo swapon -s

서버가 Reboot 될 때에도 SWAP을 자동으로 활성하 하기 위해 /etc/fstab 파일을 열어서 설정을 추가해준다.

sudo vi /etc/fstab

/swapfile swap swap defaults 0 0

 

번외) SWAP 공간 삭제하는 법

 

먼저 swapfile을 스왑공간으로 사용하지 않게 하기 위해 스왑 공간을 없애준다.

swapoff /swapfile

swapfile을 지워준다.

rm -rf /swapfile

부팅 후 스왑공간으로 올라오지 않게 /etc/fstab에 설정한 내용도 지워준다.

 

sudo vi /etc/fstab

/swapfile swap swap defaults 0 0 (이 줄 삭제)

 

 

스왑 메모리를 설정한 후에도 터지면 redis를 엘라스틱캐시(잘모름)로 따로 빼서 사용하거나할 각오까지 했었는데

다행히도 스왑 메모리를 설정하자 그 이후로는 터지지 않았다.

 

작고 소중한 프리티어의 메모리... 힘들어하면 swap 메모리로 잘 달래주도록 하자.

 

 

Reference

https://incomeplus.tistory.com/284

 

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

How to append additional memory to AWS Freetier EC2? AWS EC2 프리티어 서버가 계속해서 터진다면 99%는 메모리 부족문제라고 볼 수 있다. 프리티어로 제공되는 서버 컴퓨터의 스펙이 너무 낮기 때문에 서버에..

incomeplus.tistory.com

https://it-serial.tistory.com/entry/Linux-Swap-%ED%8C%8C%ED%8B%B0%EC%85%98%EC%9D%B4%EB%9E%80-CPU-RAM-%ED%95%98%EB%93%9C-%EB%94%94%EC%8A%A4%ED%81%AC-%E2%91%A0

 

[Linux] Swap 이란? (CPU, RAM, 하드 디스크)

처음 공부하실 때는 swap 간단한 개념만 개략적으로 이해하시고, 사용법만 익혀두시면 됩니다. 아래와 swap을 배우시기 전에 간단한 RAM과 하드 디스크의 개념과 역할을 알아두는 것이 좋습니다. (

it-serial.tistory.com

https://devkingdom.tistory.com/169

+ Recent posts