Infra/Aws

[AWS] Swap File을 이용해 EC2 메모리 부족 현상을 해결해보자

kth990303 2022. 8. 13. 00:31
반응형

작업을 하던 중 aws ec2 메모리 부족현상이 발생했다. 

우리가 사용하고 있는 t4g.micro 인스턴스 유형은 램이 1GB였고, 이는 메모리 부족현상을 충분히(?) 볼 수 있을 정도로 작은 양의 메모리였다. 이러한 현상을 어떻게 해결할까 고민하다가 swap file을 이용한 swap memory 할당이라는 방법을 알게 됐다!


스왑 파일을 이용한 스왑 공간 할당

ec2 램 메모리가 가득 찼기 때문에 실제 디스크의 용량을 이용하여 부족한 메모리를 대체할 공간을 swap memory(스왑 공간)이라 한다. 이번 포스팅에서는 linux에서 swap file을 생성하여 스왑 메모리를 할당하는 방법을 기록할 것이다. 

 

보통 swap memory는 할당된 램 메모리의 2배 또는 그 이상을 추천하고 있다. 내가 사용하는 t4g.micro 인스턴스는 램이 1GB라는 귀여운 용량이므로 swap memory는 2GB 정도로 할당할 것이다. 왜 훨씬 더 큰 용량인 4GB나 8GB로 하지 않고 2GB로 하냐 묻는다면, 그 외에 추가로 축적될 파일들의 용량(로그 파일들이 기록된다든지 등등) 도 고려해야 되기 때문이다.  

 

또한, swap 메모리는 완전히 RAM을 대체하는 것이라 보기 어렵다. 실제 디스크 용량을 할당하여 RAM을 대체하는 것이기 때문에 RAM으로 접근하는 것보다 현저히 속도가 느리기 때문이다.


방법

0. 스왑 메모리를 할당할 aws ec2에 접속한다.

$ ssh -i {key-pem 파일} {서버 OS}@{퍼블릭 ip 주소}

ex. 
ssh -i key-kth990303.pem ubuntu@1.23.456.789

 

1. Swap 파일 메모리를 할당한다.

# swapfile 메모리를 할당
sudo dd if=/dev/zero of=/swapfile bs=128M count=16

dd 명령어는 파일 복사 및 변환 관련 유닉스 명령 유틸리티라 한다. 

/dev/zero는 데이터 스토리지 초기화 관련 파일이라 한다. 

bs=128M * count=16 으로 총 2GB로 swapfile 크기를 설정해주었다.

 

2. swapfile에 접근할 수 있는 권한을 설정한다.

# swapfile 권한 세팅 (READ, WRITE)
sudo chmod 600 /swapfile

읽기, 쓰기가 가능하도록 chmod 600으로 설정해준다.

chmod 명령어에 대한 그림

 

3. mkswap 명령어로 swapfile을 추가할 swap 공간을 생성한다.

# swap 공간 생성 (Make swap)
sudo mkswap /swapfile

mkswap은 Make swap의 약자이다.

 

 

4. swapon 명령어를 통해 swapfile을 swap memory에 추가한다.

# swap 공간에 swapfile 추가하여 즉시 사용할 수 있도록
sudo swapon /swapfile

 

5. /etc/fstab에 세팅

# /etc/fstab vi 에디터 열기
sudo vi /etc/fstab

# 파일의 맨 끝 다음줄에 아래 명령어 작성
/swapfile swap swap defaults 0 0

etc/fstab는 파일시스템 정보를 저장하는 곳이다. 파티션 변경 및 디스크 추가 시에는 이 파일에 등록해야 자동으로 마운트가 가능하다.

따라서 /etc/fstab 파일에 swapfile을 세팅해주도록 하자.

 

/etc/fstab 파일에 대한 설명이 궁금하다면 아래 블로그를 참고하자.

https://meongj-devlog.tistory.com/134

 

리눅스 파일시스템 (/etc/fstab)

/etc/fstab 리눅스에서 사용하고 있는 파일시스템에 대한 다양한 정보를 저장하고 있는 파일이다. 파티션 정보를 변경하거나 디스크를 추가 할때 이 파일에 등록해야만 자동 마운트가 된다. 윈도

meongj-devlog.tistory.com

 

6. free 명령어로 ec2 메모리 상태를 확인하자.

free

swap 메모리가 할당이 됐다!

이로써 램 1GB에, 추가로 실제 디스크를 이용한 swap memory 2GB가 생성된 것이다!

속도는 느리지만 램 1GB만 사용했을 때보단 서버의 부담이 줄어드는 것을 생생히 확인할 수 있을 것이다.


swap 메모리 할당 전후 비교

Linux의 top 명령어로 현재 cpu, 메모리 할당량을 프로세스 별로 확인할 수 있다. top 이라고만 입력해주면 된다.

여기서 shift + p를 누르면 메모리를 많이 잡아먹는 순으로 프로세스를 보여준다.

  • top : cpu, 메모리 할당량을 프로세스 별로 확인할 수 있게 하는 명령어
  • shift + p : 메모리를 많이 사용하는 순으로 정렬해주는 명령어

swap 메모리 할당 전

MiB Swap 메모리를 아예 사용하지 않고, 용량이 얼마 안남은 모습을 볼 수 있다.

RAM 사용량이 27MB 정도 남았는데, 여기서 더 사용하면 메모리가 터져 특정 프로세스를 실행하지 못할 확률이 높다.

swap 메모리 할당 후

램 사용량이 30~50MB 정도 남게 되면 SWAP 메모리를 사용하는 모습을 확인할 수 있다. 약 1.5GB를 끄떡없이 사용하는 모습을 확인할 수 있다.


참고

 

도움을 준 사람

우테코 백엔드 4기 승팡 (https://github.com/Seungpang)

우테코 백엔드 4기 소주캉 (https://github.com/sojukang)

반응형