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을 추가해야 한다.
참고