Profile picture

[Linux] Ubuntu 20.04에서 Swap 메모리 설정하기

JaehyoJJAng2023년 05월 26일

◾️ Swap

swap 메모리는 하드디스크의 일부를 RAM처럼 사용하도록 만들어진 메모리이다. 지금 사용중인 컴퓨터 또는 서버에서 가지고 있는 메모리를 초과하는 프로그램을 돌리거나 그 외의 고용량 프로그램을 돌리는 경우, 일부 용량을 swap 메모리로 설정해놓으면 메모리가 run out 되는 것을 방지할 수 있다.

RAM 4G에 swap 메모리 2G를 설정한다면, 메인 메모리 4G가 초과 되었을 떄 추가로 2G의 메모리를 사용할 수 있는 것이다.

하지만 당연하게도 RAM 장치가 아닌, HDD 장치를 끌어다 사용하는 것이기 때문에 읽기/쓰기 속도가 매우 느려진다. 가장 최적의 방법은 가용할 수 있는 RAM 용량을 넘지 않게 프로세스를 조정하거나 하드웨어를 추가하는 방법 뿐이다.

나는 swap 메모리를 AWS t2.micro 인스턴스 환경에서 늘려볼 생각이다. 젠킨스 프로그램을 도커 위에서 띄울려면 상당한 RAM이 필요한데 프리티어의 RAM으로는 턱도 없기 때문이다. 젠킨스를 실행하면 RAM이 초과되어 서버가 죽어버리니 swap 메모리를 늘리는 것이 이 상황에서 베스트라고 할 수 있겠다


▪️ swap 파일 확인

스왑 파일이나 파티션이 존재하는지 확인하도록 하자

$ sudo free -m
              total        used        free      shared  buff/cache   available
Mem:            966         205          68           0         691         597
Swap:             0           0           0
$ sudo swapon -s

위의 두 명령어를 실행했을 떄 swap 관련 내용이 보이지 않거나 0인 상태라면 다음 과정을 진행하고, swap이 작동 중이라면 아래 명령을 실행하도록 하자

# swap 작동 중지
sudo swapoff -a

▪️ swapfile 생성

swap을 하기 위한 swapfile을 / 경로에 생성하도록 하자

$ sudo fallocate -l 2G /swapfile

-l 뒤에는 swapfile의 용량을 입력하면 된다. 2G를 입력하면 메인 메모리 외에 추가로 2G의 가상 메모리를 사용할 수 있게 된다. 이후 root 디렉토리 하위에 swapfile이 생성된다


swapfile의 권한을 수정하고, 해당 파일이 swap으로 동작하도록 만들자

# 권한 수정
$ sudo chmod 600 /swapfile 

# swap 활성화 준비
$ sudo mkswap /swapfile

# swap 활성화
$ sudo swapon /swapfile

swap 메모리가 정상적으로 생성되었는지 확인하도록 하자

$ free -m
              total        used        free      shared  buff/cache   available
Mem:            966         204          67           0         694         599
Swap:          2047           0        2047

swap 메모리가 늘어난 것을 확인할 수 있었다


swap 메모리가 생성되었지만, 서버가 재부팅해도 스왑 메모리가 그대로 남아있도록 만들려면 /etc/fstab 파일을 아래와 같이 수정해주어야 한다.

$ echo "/swapfile swap swap defaults 0 0" | tee -a /etc/fstab

▪️ swapfile 삭제

이제 스왑 메모리를 쓸 일이 없다면 당연히 swapfile을 삭제해주어야 한다. 프리티어는 가뜩이나 디스크 용량이 부족한데 swap 메모리로 인해 더 부족해진 상황이니까 ,,


1. swap 비활성화

$ sudo swapoff -v /swapfile

2. /etc/fstab에 추가했던 구문 삭제

$ sudo sed -i '/\/swapfile swap swap defaults 0 0/d' /etc/fstab

💡 sed commands

sed -i: sed 명령어를 사용하되, 원본 파일을 직접 수정합니다(-i 옵션)

/\/swapfile swap swap defaults 0 0/d: 지정한 패턴(/swapfile swap swap defaults 0 0)을 가진 라인을 삭제합니다(d 명령). 패턴 내의 슬래시(/)는 정규 표현식에서 구분자로 사용되므로 슬래시를 사용하기 위해 슬래시를 역슬래시로 이스케이프합니다.


▪️ /etc/fstab 등록

서버 재부팅 시에도 스왑 메모리가 적용되어있기를 원하므로, /etc/fstab 파일을 수정하여 해당 스왑 파티션을 자동으로 마운트하도록 설정하자.

sudo sh -c 'cat >> /etc/fstab << EOF
/swapfile swap swap defaults 0 0
EOF'

Loading script...