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에서 메모리 업그레이드가 필요하다면 텔레그램으로 문의해 주세요.