VPS처럼 RAM이 제한된 서버에서는 메모리가 부족하면 OOM Killer가 발동하여 중요한 프로세스를 강제 종료합니다. 스왑(Swap)을 설정하면 디스크 공간을 임시 메모리처럼 사용하여 이를 완화할 수 있습니다.
현재 스왑 상태 확인
# 스왑 현황 확인
sudo swapon --show
# 메모리 전체 현황
free -h
스왑 파일 생성
# 2GB 스왑 파일 생성 (RAM의 1~2배 권장)
sudo fallocate -l 2G /swapfile
# 권한 설정 (root만 읽기/쓰기)
sudo chmod 600 /swapfile
# 스왑 영역으로 초기화
sudo mkswap /swapfile
# 스왑 활성화
sudo swapon /swapfile
# 확인
sudo swapon --show
free -h
부팅 시 자동 활성화
/etc/fstab 파일에 추가합니다:
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
스왑 사용 적극도(Swappiness) 조정
swappiness는 시스템이 메모리 대신 스왑을 얼마나 적극적으로 사용할지 결정하는 값입니다 (0~100).
0: 메모리가 완전히 차기 전까지 스왑 사용 안 함60: 기본값100: 가능한 한 스왑을 적극 사용
서버 환경에서는 10으로 낮추는 것을 권장합니다:
# 현재 swappiness 확인
cat /proc/sys/vm/swappiness
# 즉시 변경 (재부팅 후 초기화)
sudo sysctl vm.swappiness=10
# 영구 적용
echo 'vm.swappiness=10' | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
캐시 압력(Cache Pressure) 조정
# 파일시스템 캐시를 더 오래 유지
echo 'vm.vfs_cache_pressure=50' | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
스왑 사용량 모니터링
# 실시간 스왑 사용량 모니터링
watch -n 1 'free -h'
# 스왑을 많이 사용하는 프로세스 확인
for file in /proc/*/status; do
awk '/VmSwap|Name/{printf $2 " " $3 "\n"}' $file
done | sort -k 2 -n -r | head -20
스왑 비활성화 및 삭제
# 스왑 비활성화
sudo swapoff /swapfile
# /etc/fstab에서 해당 줄 삭제
sudo sed -i '/swapfile/d' /etc/fstab
# 파일 삭제
sudo rm /swapfile
스왑이 만능이 아닌 이유
스왑은 RAM의 완전한 대체제가 아닙니다. 디스크는 RAM보다 수십~수백 배 느리기 때문에, 스왑 사용량이 지속적으로 높다면 서비스 성능이 크게 저하됩니다. 스왑은 긴급 완충재로만 활용하고, 근본적으로는 메모리 용량을 업그레이드하거나 메모리 최적화를 통해 해결해야 합니다.
TCP-80.NET에서 메모리 업그레이드가 필요하다면 텔레그램으로 문의해 주세요.