swap 은 disk 를 메모리로 사용하는 방법으로 물리적인 메모리가 넉넉하더라도 특정 app 는 스왑 디스크를 요구할 수 있으므로 미리 만들어 주는 게 좋습니다.

일반적인 리눅스 배포판을 설치하면 설치 과정에서 자동으로 만들어 주지만 AWS (Amazon Web Service) 에서 EC2 를 생성할 경우 자동으로 만들어 주지 않으므로 다음 절차로 swap disk를 만들고 mount 해서 사용하면 됩니다.


TL;DR

스왑 만들기

  1. 파일을 복사하는 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
  2. 일반 사용자가 스왑에 있는 내용을 보거나 지우지 못하도록 chmod 로 권한을 설정합니다.

    $ sudo chmod 600 /swapfile
    BASH
  3. mkswap 명령어로 만든 파일을 스왑 파일로 변환합니다.

    $ sudo mkswap /swapfile
    
    Setting up swapspace version 1, size = 2 GiB (2147479552 bytes)
    no label, UUID=25830dd2-7845-4470-aeed-7f82bdaff8d8
    BASH
  4. swapon 명령어로 스왑을 활성화합니다.

    $ sudo swapon /swapfile
    BASH
  5. 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) 허용시 권장 용량
< 2GBRAM 의 2배. 2GB 일 경우 4GB 권장RAM 의 3배
2GB에서 8GBRAM과 동일한 크기RAM 의 2배
8GB에서 64GBRAM 의 절반RAM 의 1.5배
64GB이상4GB별도의 스왑 공간 불필요


Ref