[Linux] Swap Space를 통해 가상메모리 추가하기

sightstudio

·

2020. 8. 8. 17:56

목차.

 

1. 계기

 

필자는 해커톤, 학교 과제, 공모전 등에서 서버로 AWS EC2 프리티어를 자주 애용하는 편이다.
하지만 EC2 프리티어의 최대 메모리(RAM)은 1GB 이고, 운영서버에서 이를 초과하면 인스턴스는 바로 죽어버린다.


당연히 ssh 접속도 안되며, AWS-CLI나 패널 등을 통해 인스턴스를 재부팅해야만 한다.
사실 메모리를 늘리면 해결될 일이지만, 돈을 안들이고 해결하는 방법을 찾고 싶었다.

 

이런 상황을 막기 위해 고민을 하던 도중.. 대학교 컴퓨터 구조 시간에 배운 가상메모리가 떠올라서
Swap Space을 적용을 시켜보았다. Swap Space은 가상 메모리를 구현하는 방법 중 일부로써, 사용 중인 메모리가
완전히 찼을 경우, 미리 만들어둔 스왑파일을 통해 메모리의 데이터를 디스크에 저장하는 방식이다.

이 글을 처음 쓰는 시점에서는 컴퓨터 구조때 배운 가상 메모리스왑 공간을 혼동했었는데,

덕분에 개념을 다시 알수 있었다.

 

2. 적용과정

 

시연환경 : AWS EC2 (Centos 7) - 프리티어

 

2-1. htop을 통한 서버 상태 확인

 

EC2 최초 설치시 서버 상태

 

 

 

htop은 유닉스 계열에서 쓰던 top을 개선시킨 프로그램으로서,

리눅스에서 사용하는 간단한 시스템 모니터링 툴이다.
CentOS에서 사용하려면 EPEL 저장소를 추가하고 설치해야한다.

 

yum install -y epel-release && 
yum install -y htop

 

위의 서버 상태를 보면 아무것도 설치하지 않았는데도 벌써 100M이상의 메모리를 사용하고 있다.
Polkit(구 PolicyKit)등 인증, 보안 프로그램등이 설치되어 있기 때문이다.
이 상태에서 웹서버, WAS, 젠킨스 등등 이것저것 설치하여 운영하다보면 메모리가 1GB로는 벅찰 것이다.

좌측 상단 3번째에 Swp라고 써있는 부분이 우리가 적용할 Swap Space 상태이다. 현재 0으로 되어있다.

 

2-2. Swap Space 적용

 

1. 스왑파일 생성
sudo dd if=/dev/zero of=/swap bs=128M count=16

AWS문서에서는 RAM이 2GB이하 일 경우, RAM용량의 2배를 권장하기 때문에 2GB를 할당하였다.
dd(dataset definition)은 블록 단위로 데이터를 변환·복사하는 리눅스 명령어이다.

루트에 swap이라는 파일을 만들어 준다.
스왑 파일 생성에 약간 시간이 걸릴 수 있다.

 

/dev/zero : 널문자를 무한히 제공하는 리눅스 장치 파일


bs : 블록 사이즈
count : 블록 개수

 

루트에 스왑파일 생성

2. 스왑 파일 권한 업데이트 및 영역 설정
sudo chmod 600 /swap
sudo mkswap /swap
3. 스왑 공간에 스왑파일 추가 및 확인
sudo swapon /swap
sudo swapon -s

여기까지 왔으면 화면은 아래와 같다.

적용 후 결과 확인

하지만 여기까지하고 인스턴스를 재시작한다면 스왑 스페이스가 적용되어있지 않을 것이다.

 
4. 부팅시 스왑파일 활성화

 

vim등 편집기를 통해 /etc/fstab 파일 맨 마지막줄에 다음과 같이 추가한다.

/swap swap swap defaults 0 0
(파일명) 

모두 적용 후, htop을 통해 시스템 상태를 보면 다음과 같이 적용되어 있는걸을 확인할 수 있다.

Swap Sapce가 적용된 모습

2-3. Swap Space 제거

 

제거 방법은 다음과 같다.
먼저, /etc/fstab에 추가하였던 내용을 제거한다.

 

1. 스왑 비활성화
sudo swapoff -v /swap
2. 스왑 파일 삭제 (선택사항)
sudo rm /swap

3. 결론

 

사실 swap space는 나처럼 메모리를 늘릴 방법이 없을 때 만 쓰는것이 좋다.

당장 Redis와 같은 In-Memory DB에서도 스왑으로 인한 성능 저하 때문에 가상메모리 사용을 자제한다.

 

Reference

 

AWS document