요즘은 과거에 비해서 RAM의 가격이 낮아져서 적어도 8G 이상의 메모리를 시스템에 설치를 합니다. 이러다 보니 특별히 그래픽을 많이 사용하지 않는 경우에는 메모리가 많이 남게 됩니다. 저의 경우에도 16G 정도의 시스템에서는 메모리를 전부 사용하는 일을 본 적은 아직 없습니다. 이런 상황에서 과거에 알려진 스왑 파일 시스템은 물리 메모리의 2배라는 인식도 맞지 않습니다.
그래서 레드헷(RedHat, 2018년 1월)에서는 시스템의 메모리 정도에 따라서 스왑 파일 시스템의 크기를 다르게 구성하는 것을 권하고 있습니다.
RAM | swap space | swap space with hibernation |
2GB 미만 | RAM의 2배 크기 | RAM의 3배 크기 |
2GB ~ 8GB | RAM과 같은 크기 | RAM의 2배 크기 |
8GB ~ 64GB | 적어도 4GB 크기 | RAM의 1.5배 크기 |
64GB 이상 | 적어도 4GB 크기 | Hibernation 추천안함 |
한편, 과거의 물리적인 한계의 HDD의 성능을 벗어나기 위해 반도체로 만든 SSD의 성능은 놀랍게 빨라졌습니다. 그러나 상대적으로 기가 바이트당 가격은, HHD에 비해서 SSD가, 10배 정도 높습니다. 이런 상황에서 시스템은 SSD를 사용하지만, 많은 데이터는 HDD에 보관하는 것이 좀 더 일반적일 것입니다.
그러므로 SSD에 고정적으로 별도의 스왑 파티션을 만들어 두는 것보다는 필요에 따라 크기를 변경할 수 있도록 파일 형태로 스왑을 관리해 보고자 합니다.
스왑 파일
새로운 스왑 파일을 만들기 전에 현재 시스템에 적용된 스왑 시스템을 먼저 확인합니다:
- swapon -s
시스템에 스왑 시스템이 없다면, 아무것도 출력하지 않습니다.
다음으로 현재 파일 시스템을 확인해서 어느 정도의 스왑 파일 시스템을 만들 수 있는지 확인을 합니다.
- df
Filesystem 1K-blocks Used Available Use% Mounted on
udev 8147380 0 8147380 0% /dev
tmpfs 1642328 9540 1632788 1% /run
/dev/nvme0n1p5 119282932 13640788 99559840 13% /
tmpfs 8211636 25072 8186564 1% /dev/shm
tmpfs 5120 4 5116 1% /run/lock
tmpfs 8211636 0 8211636 0% /sys/fs/cgroup
/dev/nvme0n1p2 97280 28985 68295 30% /boot/efi
tmpfs 1642328 44 1642284 1% /run/user/1000
스왑 파일 만들기
아래의 명령으로 2G의 파일을 스왑으로 사용하기 위해 준비를 합니다.
- sudo dd if=/dev/zero of=/swapfile bs=1024 count=2048k
여기서 of=/swapfile은 파일 이름을 지정하는 것입니다. 물리적인 장치가 마운트된 위치 아래에 적당한 이름으로 만들어 줍니다.
만들어진 파일을 스왑 파일로 만듭니다.
- sudo mkswap /swapfile
스왑 파일 사용하기
만들어진 스왑 파일을 시스템에서 사용하도록 명령합니다.
- sudo swapon /swapfile
정상적으로 시스템에서 인식을 했는지 확인을 합니다.
- sudo swapon -s
Filename Type Size Used Priority
/swapfile file 2097148 0 -2
정상적으로 스왑 파일이 동작을 한다면, 시스템이 시작할 때 자동으로 인식하도록 설정을 추가해 줍니다.
- sudo nano /etc/fstab
/swapfile none swap sw 0 0
잦은 스왑은 시스템에 부하를 가중시키므로, 파일의 Swappiness를 10으로 설정하는 것이 좋습니다.
- echo 10 | sudo tee /proc/sys/vm/swappiness
이 부분도 시스템이 시작할 때 자동으로 적용되도록 설정을 추가(또는 수정)해 줍니다.
- sudo nano /etc/sysctl.conf
vm.swappiness = 10
허가권 수정
스왑 파일 시스템을 다른 사용자가 읽어서는 안됩니다. 다음과 같이 사용자와 권한을 수정해 줍니다.
- sudo chown root:root /swapfile
- sudo chmod 0600 /swapfile
점검
주기적으로 다음 명령을 실행해서 스왑 파일을 사용하는지 확인을 합니다.
- free
total used free shared buff/cache available
Mem: 16423272 3057984 11834936 78188 1530352 12935308
Swap: 2097148 0 2097148
스왑 파일 제거
Zram을 이용하면, 디스크 I/O의 부담이 줄기 때문에, 스왑 파일을 대체할 수 있습니다.
따라서, zram을 설정했다면, 스왑파일을 아래와 같이 제거할 수 있습니다.
먼저 스왑으로 사용하는 스왑파일을 중지합니다.
- sudo swapoff -v /swapfile
그런 다음, /etc/fstab에서 위에서 추가한 줄을 제거하거나, 주석처리합니다.
마지막으로 해당 파일을 삭제합니다.
- sudo rm /swapfile