[Linux] 스왑 메모리(Swap Memory)의 개념과 적용방법

1. 리눅스 Swap 메모리 설정 (예제는 EC2 환경에서 진행)

1-1. Swap 메모리 확인

swapon -s 

free -h

shared = 하나의 프로세스에서 다른 프로세스의 데이터에 효율적으로 접근하기 위해 사용하는 메모리
buff/cache = 버퍼와 캐시를 위해 사용하는 메모리, 커널이 성능향상을 위해 캐시 영역으로 사용되는 메모리
buff = 프로세스가 사용하는 메모리 영역이 아닌 시스템 성능향상을 위해 커널이 사용하고 있는 영역
cache = 캐시영역의 메모리, I/O 작업을 더 빠르게 하기 위해 커널에서 사용

* total - buff/cache - free = 사용중인 메모리
* total - used - buff/cache = 실제 사용가능한 메모리

1-2. Swap 메모리 추가

sudo dd if=/dev/zero of=/swapfile bs=1024 count=200000
bs = 포멧 단위 (bs = 1M 로도 사용 가능)
count = 블록수, 1kb를 200000번 /dev/zero로 초기화하기에 총 200MB의 공간을 Swap 파일로 포맷한 것으로 메모리 크기를 의미한다. (count=2000000 -> 2GB swap 메모리)

1-3. mkswap으로 Swap 파일로 포멧

sudo mkswap swapfile

sudo chmod 600 /swapfile

1-4. Swap 메모리 활성화

-- 단일 Swap 메모리 on
sudo swapon swapfile

-- 전체 Swap 메모리 on
swapon -a

swapon: /swapfile: swapon failed: Device or resource busy

에러가 뜬다면 sudo swapoff /swapfile로 Swap 비활성화 후 다시 시도해 주면 된다.

Swap 메모리가 활성된 후에 다시 "1-1. Swap 메모리 확인"을 해보면, 설정값만큼의 Swap 메모리가 활성화된 것을 확인할 수 있다.

 

1-5. 시스템 재시작 시에도 Swap 메모리 활성화

sudo vi /etc/fstab

해당 파일을 열어 맨 아랫줄에

/sawpfile swap swap default 0 0

를 추가하면 된다.

 

1-6. Swap 메모리 비활성화

-- 단일 Swap 메모리 off
sudo swapoff swapfile

-- 전체 Swap 메모리 off
swapoff -a

1-7. Swap 메모리 삭제

sudo rm -r swapfile

swap out -> swap in 되면서 실제 물리 메모리로 이동한다. (다소 시간이 걸리는 작업이다.)

1-8. Swap 영역 초기화

Swap 파티션 초기화

sudo mkswap /dev/{swap partition}

Swap 파일 초기화

sudo truncate -s 0 /path/to/swapfile

sudo chmod 600 /path/to/swapfile

sudo mkswap /path/to/swapfile

Swap 초기화 시, Swap 영역의 데이터가 모두 삭제된다. Swap 메모리 초기화 시에는해당 파티션, 해당 파일을 원마운트하고 비워야 한다.

1-9. Swap 영역 다시 활성화

Swap 파티션 활성화

sudo swapon /dev/{swap partition}

Swap 파일 활성화

sudo swapon /path/to/swapfile

2. Swap 메모리란?

주 메모리(RAM)가 모두 사용되어 추가 메모리가 필요할 때 디스크 공간을 활용하여 부족한 메모리를 대체할 수 있는 공간이다. 운영 체제는 일부 데이터를 RAM에서 디스크의 Swap 영역(하드디스크의 특정 파티션 혹은 Swap 파일)으로 옮겨 메모리 부족상태를 해결한다. 하드디스크를 사용하는 것이 아니라 속도 측면에선 아주 떨어지지만 시스템 안정성과 성능 유지에 큰 역할을 한다. 실제 메모리보다 큰 프로그램을 실행하거나 동시에 더 많은 프로세스를 실행하는 데 사용된다. 예를 들어 ec2 프리티어의 경우 t2.micro RAM 은 1G 뿐이지만 임시로 swap 메모리를 설정하면, 여러 개 프로세스 띄울 수 있게 된다.

 

그렇다면 RAM이 낮은 인스턴스를 사용하고 Swap메모리를 사용하는 것이 비용적으로 효율적일까?

Swap 메모리는 데이터 전송속도가 느리기에 Swap 메모리 초기화 시에는해당 파티션, 해당 파일을 원마운트하고 비워야 한다. 영역으로 데이터를 옮기는 작업이 발생할 때 성능이 저하된다. 빈번한 Swap이 발생할 경우 성능향상을 위해서 RAM을 추가해야 한다.

 

 

참고

https://reakwon.tistory.com/96

https://jw910911.tistory.com/122

https://serverfault.com/questions/688627/swapon-failed-device-or-resource-busy-on-mounted-disk