리눅스 서버 Swap 메모리 설정으로 RAM 부족 현상 해결하기

AWS 프리티어나 저사양 서버에서 Spring Boot 같은 메모리 집약적 애플리케이션을 실행하다 보면 RAM 부족으로 프로세스가 강제 종료되거나 SSH조차 응답하지 않는 상황을 겪게 됩니다. 물리 메모리를 증설할 수 없는 환경이라면, 디스크 일부를 가상 메모리로 활용하는 Swap 메모리가 현실적인 해결책입니다. 이번 글에서는 Ubuntu/Linux 서버에 스왑을 설정하는 전체 절차와, 실무에서 반드시 알아야 할 주의사항을 정리합니다.


리눅스 서버 Swap 메모리 설정으로 RAM 부족 현상 해결하기




1. Swap 메모리란 무엇이고, 언제 필요한가

Swap은 디스크 공간을 RAM처럼 사용하는 가상 메모리 기법입니다. 물리 메모리가 가득 찼을 때 덜 중요한 데이터를 디스크로 옮겨(swap out) 시스템이 OOM(Out Of Memory) Killer에 의해 프로세스를 강제 종료하는 것을 방지합니다.

  • 필요한 상황: AWS t2.micro(1GB RAM), 딥러닝 학습, 빌드 작업(Gradle/Maven) 등 일시적으로 메모리 사용량이 급증하는 경우
  • 한계: 디스크 I/O는 RAM 대비 수백 배 느리므로 성능 저하는 불가피합니다. HDD 환경에서는 체감 속도가 크게 떨어지며, SSD라 해도 잦은 쓰기는 수명에 영향을 줍니다.
  • 결론: Swap은 시스템 가용성 유지를 위한 임시 방편이지 성능 향상 수단이 아닙니다. 장기적으로는 RAM 증설이나 인스턴스 업그레이드를 권장합니다.

2. 스왑 크기 산정 기준

스왑 파일 크기는 물리 RAM 용량에 따라 다르게 설정해야 합니다. 아래는 업계 표준 가이드라인입니다.

  • RAM 2GB 이하: RAM의 2배 (단, 최소 32MB 이상 필수)
  • RAM 2GB 초과 ~ 32GB 미만: 4GB + (RAM - 2GB)
  • RAM 32GB 이상: RAM의 1배

예시: AWS 프리티어 t2.micro(1GB RAM)의 경우 → 2GB 스왑 권장
주의: 스왑 크기를 32MB 미만으로 설정하면 커널이 제대로 인식하지 못하거나 효과가 없으므로 반드시 준수하십시오.

3. 스왑 파일 생성 및 활성화 절차

아래는 Ubuntu/Debian 계열 기준이며, CentOS/RHEL도 명령어는 동일합니다.

3-1. 현재 메모리 및 스왑 상태 확인

sudo free -h
sudo swapon --show

Swap 항목이 0이거나 출력이 없으면 스왑이 비활성화된 상태입니다.

3-2. 스왑 파일 생성 (2GB 기준)

방법 1 - fallocate (권장): 빠르고 간편하며 대부분의 파일시스템(ext4, XFS)에서 동작합니다.

sudo fallocate -l 2G /swapfile

방법 2 - dd (대체): fallocate를 지원하지 않는 파일시스템(Btrfs 일부 버전)에서 사용합니다.

sudo dd if=/dev/zero of=/swapfile bs=128M count=16

(bs=128M × count=16 = 2GB)

3-3. 권한 설정 (보안 필수)

sudo chmod 600 /swapfile

이유: 스왑 파일에는 메모리 덤프가 기록되므로, 다른 사용자가 읽을 수 없도록 반드시 600 권한을 부여해야 합니다.

3-4. 스왑 영역 초기화 및 활성화

sudo mkswap /swapfile
sudo swapon /swapfile

3-5. 적용 확인

sudo swapon --show
sudo free -h

Swap 항목에 2GB가 표시되면 정상입니다.

3-6. 재부팅 후에도 유지 (영구 적용)

/etc/fstab 파일 끝에 다음 라인을 추가합니다.

sudo vi /etc/fstab

# 파일 끝에 추가
/swapfile none swap sw 0 0

또는

/swapfile swap swap defaults 0 0

반드시 재부팅 후 swapon --show로 스왑이 자동 활성화되었는지 확인하십시오.

4. 스왑 용량 변경 및 삭제

4-1. 스왑 용량 변경 (예: 2GB → 4GB)

sudo swapoff -a
sudo rm /swapfile
sudo fallocate -l 4G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon -a

4-2. 스왑 완전 삭제

sudo swapoff -a
sudo rm /swapfile

그 후 /etc/fstab에서 스왑 관련 라인을 삭제하십시오.

5. 실무 운영 시 주의사항 및 꿀팁

  • SSD 환경에서는 swappiness 값 조정: 기본값 60은 스왑을 적극적으로 사용합니다. SSD 수명을 고려한다면 10~20으로 낮추십시오.
    sudo sysctl vm.swappiness=10
    영구 적용: /etc/sysctl.conf에 vm.swappiness=10 추가
  • 모니터링: vmstat 1 명령으로 si(swap in), so(swap out) 수치를 실시간 확인하십시오. 값이 지속적으로 높다면 RAM 증설이 필요합니다.
  • 프리티어 최적화: t2.micro에서는 Gradle 빌드 시 org.gradle.jvmargs=-Xmx512m로 힙 크기를 제한하고, 불필요한 백그라운드 서비스(Elasticsearch, Redis 등)는 비활성화하십시오.
  • fallocate vs dd: ext4, XFS는 fallocate 사용, Btrfs는 dd 사용. fallocate가 10배 이상 빠릅니다.
  • 보안: chmod 600을 누락하면 /swapfile에 민감한 메모리 데이터가 노출될 수 있습니다. 반드시 설정하십시오.

요약 및 Action Item

Swap은 RAM 부족으로 인한 시스템 다운을 막는 최소한의 안전장치입니다. fallocate로 파일 생성 → chmod 600 → mkswap → swapon → /etc/fstab 등록 순서를 지키면 5분 내 설정 가능합니다. 단, 디스크 기반이므로 성능 저하는 감수해야 하며, 장기적으로는 RAM 증설이 근본적인 해결책입니다.

지금 바로 실행할 것: 현재 서버에서 sudo free -h로 메모리 사용률을 확인하고, 80% 이상이라면 위 절차대로 2GB 스왑을 설정한 뒤 swapon --show로 검증하십시오. 설정 후에도 지속적으로 스왑 사용량이 높다면 모니터링 도구(CloudWatch, Datadog 등)를 통해 메모리 병목 지점을 찾아 최적화하거나 인스턴스 업그레이드를 검토하십시오.


#함께 읽으면 좋은 글

Linux 디스크 용량 꽉 찼을 때 df du 명령어로 범인 찾기 : 바로보기

댓글