작은 서버는 최악의 순간에 메모리가 바닥납니다. apt upgrade, Docker 빌드, 한밤중의 백업 같은 때입니다. 스왑이 없으면 커널의 OOM killer가 프로세스 하나를 골라 강제로 종료하는데, 그게 데이터베이스인 경우가 많습니다. 스왑 파일은 그런 급증에 빠져나갈 길을 만들어 주는 저렴한 안전벨트입니다. 명령 5개면 됩니다.
1. 현재 상태 확인
swapon --show
free -h
swapon --show가 아무것도 출력하지 않으면 아직 스왑이 없는 것입니다.
2. 스왑 파일 만들기
fallocate -l 2G /swapfile
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
chmod 600은 중요합니다. 스왑에는 비밀 정보를 포함해 메모리에 있던 무엇이든 조각으로 남을 수 있으므로 root만 읽을 수 있어야 합니다. fallocate가 “operation not supported” 오류로 실패하면 대신 dd를 쓰세요.
dd if=/dev/zero of=/swapfile bs=1M count=2048 status=progress
3. 영구적으로 만들기
이 단계가 없으면 재부팅 시 스왑이 사라집니다.
echo '/swapfile none swap sw 0 0' >> /etc/fstab
4. swappiness 조정
커널이 RAM을 우선하고 주로 압박을 받을 때 스왑을 쓰도록 합니다.
echo 'vm.swappiness=10' > /etc/sysctl.d/99-swap.conf
sysctl --system
5. 확인
swapon --show
free -h
2 GB 스왑 장치가 보여야 하고, cat /proc/sys/vm/swappiness는 10을 출력해야 합니다.
크기는 얼마나?
- RAM 1~2 GB 서버: 스왑 1~2 GB.
- 4 GB 이상: 안전망으로는 여전히 1~2 GB면 충분합니다.
스왑을 “RAM의 두 배”로 잡지 마세요. 서버에서 스왑은 짧은 급증을 흡수하기 위한 것이지, 메모리에 들어가지 않는 작업을 돌리기 위한 것이 아닙니다.
스왑이 답이 아닐 때
며칠 동안 지켜보세요.
vmstat 5
si와 so 열은 초당 스왑에서 읽어 들이고 스왑으로 써 내는 페이지 수를 보여 줍니다. 가끔 움직이는 것은 정상입니다. 계속 0이 아닌 값이 나온다면 서버에 메모리가 부족해 모든 것이 디스크를 기다리고 있다는 뜻입니다. 이때의 해법은 RAM 증설입니다. VPS에 필요한 RAM을 참고하세요. EQVPS에서는 재설치 없이 더 큰 요금제로 옮길 수 있고, 데이터는 그대로 남습니다.
댓글
아직 댓글이 없습니다. 첫 번째가 되세요.