swap 은 disk 를 메모리로 사용하는 방법으로 물리적인 메모리가 넉넉하더라도 특정 app 는 스왑 디스크를 요구할 수 있으므로 미리 만들어 주는 게 좋습니다.
일반적인 리눅스 배포판을 설치하면 설치 과정에서 자동으로 만들어 주지만 AWS (Amazon Web Service) 에서 EC2 를 생성할 경우 자동으로 만들어 주지 않으므로 다음 절차로 swap disk를 만들고 mount 해서 사용하면 됩니다.
TL;DR
스왑 만들기
파일을 복사하는 dd 명령어를 사용해서 빈 파일을 만들어 주며 아래는 block size 를 1 M 씩 읽어서 2048 번 복사하므로 2G 크기의 파일을 생성합니다. (bs 뒤에 1M 은 꼭 대문자로 써야 합니다.)
2G 파일 생성
$ sudo dd if=/dev/zero of=/swapfile bs=1M count=2048
2048+0 records in
2048+0 records out
2147483648 bytes (2.1 GB, 2.0 GiB) copied, 3.68019 s, 584 MB/s
BASH
일반 사용자가 스왑에 있는 내용을 보거나 지우지 못하도록 chmod 로 권한을 설정합니다.
$ sudo chmod 600 /swapfile
BASH
mkswap 명령어로 만든 파일을 스왑 파일로 변환합니다.
$ sudo mkswap /swapfile
Setting up swapspace version 1, size = 2 GiB (2147479552 bytes)
no label, UUID=25830dd2-7845-4470-aeed-7f82bdaff8d8
BASH
swapon 명령어로 스왑을 활성화합니다.
$ sudo swapon /swapfile
BASH
free 또는 swapon 명령어로 스왑이 잘 추가되었는지 확인합니다.
$ free -h
total used free shared buff/cache available
Mem: 3.9G 3.1G 122M 800K 663M 560M
Swap: 2.0G 268K 2.0G
BASH
$ swapon -v
NAME TYPE SIZE USED PRIO
/swapfile file 2G 268K -2
BASH
부팅시 자동 등록
부팅시 스왑을 자동으로 활성화하려면 여러 방법이 있지만 /etc/fstab 에 추가하는 게 제일 간단합니다.
$ sudo echo "/swapfile none swap defaults 0 0" | sudo tee -a /etc/fstab
CODE
이제 재부팅을 한 후에 자동으로 스왑이 마운트되는지 확인합니다.
권장 스왑 크기
과거에는 시스템에 있는 물리적인 메모리의 크기만큼의 스왑 파일 생성을 권장했습니다. 즉 메모리가 128M 이면 128M의 스왑 공간을, 256M 이면 256M 만큼의 스왑 공간을 만들었습니다.
하지만 메모리 용량이 매우 커진 지금은 물리적인 메모리만큼의 스왑을 권장하지 않습니다.
Redhat 의 문서에 따르면 다음과 같은 스왑 공간 생성을 권장하고 있습니다.
시스템 RAM 용량 | 권장 스왑 용량 | 동면 모드(hybenation) 허용시 권장 용량 |
---|
< 2GB | RAM 의 2배. 2GB 일 경우 4GB 권장 | RAM 의 3배 |
2GB에서 8GB | RAM과 동일한 크기 | RAM 의 2배 |
8GB에서 64GB | RAM 의 절반 | RAM 의 1.5배 |
64GB이상 | 4GB | 별도의 스왑 공간 불필요 |
Ref