리눅스 스왑 메모리 설정 방법 (swapfile 만들기, swappiness)
메모리가 1~2GB인 작은 클라우드 서버에서 MySQL이나 워드프레스가 갑자기 꺼진다면, 메모리가 바닥나 리눅스가 프로세스를 강제로 종료한 것일 수 있다. 이때 가장 먼저 해 볼 수 있는 대응이 스왑이다. 이 글에서는 스왑 파일을 만들어 켜는 스왑 메모리 설정 방법과 swappiness 조정, 삭제 방법까지 정리한다. 현재 메모리 상태를 보는 방법은 리눅스 메모리 확인 방법에 있다.

스왑이란
스왑은 메모리(RAM)가 부족할 때 당장 쓰지 않는 데이터를 디스크로 잠시 옮겨 두는 공간이다. 디스크는 메모리보다 훨씬 느리기 때문에 스왑이 메모리를 대신할 수는 없다. 하지만 순간적으로 메모리가 부족할 때 프로세스가 강제 종료(OOM Killer)되는 것을 막는 완충 역할을 한다. 클라우드 서버 이미지는 기본으로 스왑이 없는 경우가 많다.
메모리 부족으로 프로세스가 죽었는지 확인
sudo dmesg -T | grep -i "killed process"
sudo journalctl -k | grep -i oom현재 스왑 확인
free -h
swapon --showfree -h 결과의 Swap 줄이 0B이고 swapon –show에 아무것도 나오지 않으면 스왑이 없는 상태다.
스왑 메모리 설정 1단계 스왑 파일 만들기
별도 파티션 없이 파일 하나로 스왑을 만들 수 있다. 먼저 df -h로 디스크 여유 공간을 확인하자.
# 1) 2GB 파일 만들기
sudo fallocate -l 2G /swapfile
# fallocate 가 안 되는 파일 시스템이면
# sudo dd if=/dev/zero of=/swapfile bs=1M count=2048
# 2) root 만 읽고 쓸 수 있게
sudo chmod 600 /swapfile
# 3) 스왑 영역으로 만들고 켜기
sudo mkswap /swapfile
sudo swapon /swapfile
# 4) 확인
swapon --show
free -h재부팅 후에도 유지하기
# /etc/fstab 에 한 줄 추가 (백업 후 수정)
sudo cp /etc/fstab /etc/fstab.bak
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab/etc/fstab을 잘못 고치면 부팅에 문제가 생길 수 있으니 꼭 백업한 뒤 수정하고, 수정 후에는 sudo swapon -a로 오류가 없는지 확인하자.
스왑 크기는 얼마나
| 메모리 | 권장 스왑(서버 기준) |
|---|---|
| 1GB 이하 | 1~2GB |
| 2GB | 2GB |
| 4~8GB | 2~4GB |
| 그 이상 | 2~4GB 또는 필요 시 |
정답이 있는 값은 아니다. 서버는 최대 절전(하이버네이트)을 쓰지 않으므로 메모리만큼 크게 잡을 필요는 없다. 스왑을 자주, 많이 쓰고 있다면 스왑을 늘리기보다 메모리를 늘리거나 서비스 설정을 줄이는 것이 맞다.
스왑 메모리 설정 최적화 swappiness
swappiness는 커널이 얼마나 적극적으로 스왑을 쓸지 정하는 값(0~100)이다. 기본값은 보통 60인데, 서버에서는 10 정도로 낮춰 메모리를 먼저 쓰고 스왑은 비상용으로 남겨 두는 경우가 많다.
# 현재 값
cat /proc/sys/vm/swappiness
# 즉시 변경
sudo sysctl vm.swappiness=10
# 재부팅 후에도 유지
echo 'vm.swappiness=10' | sudo tee /etc/sysctl.d/99-swappiness.conf
sudo sysctl --system관련 커널 값은 리눅스 커널 vm sysctl 문서에 설명되어 있다.
스왑 파일 삭제
sudo swapoff /swapfile
# /etc/fstab 에서 /swapfile 줄 삭제 후
sudo rm /swapfile스왑과 함께 새 서버에서 처음 해 둘 설정은 리눅스 서버 초기 세팅 체크리스트에 정리했다.
스왑 메모리 설정 정리
작은 서버에서 스왑은 “느리지만 서비스가 죽지는 않게” 해 주는 보험이다. 2GB 정도의 스왑 파일과 낮은 swappiness만 설정해 두어도 갑작스러운 메모리 부족으로 DB가 꺼지는 일을 크게 줄일 수 있다. 데이터베이스를 운영한다면 mysqldump 백업도 함께 챙겨 두자.
첫 댓글을 남겨보세요