본문 바로가기
Linux

Swap Memory

by 우 석 2025. 5. 25.

1. Swap Memory

1.1 기본 개념

Swap Memory는 리눅스 커널이 주기억장치(RAM) 부족 상황에서 보조기억장치(HDD/SSD)의 일부를 메모리처럼 사용하는 기능이다. 메모리는 휘발성이며 속도가 빠른 반면, Swap은 비휘발성 저장장치를 사용하므로 느리지만 시스템의 안정성과 연속성을 유지하는 데 중요한 역할을 한다.

1.2 Swap이 필요한 이유

  • RAM이 부족한 상황에서도 시스템을 계속 동작시킬 수 있다.
  • 사용하지 않는 메모리 페이지를 Swap 공간으로 밀어내어 메모리 여유를 확보할 수 있다.
  • 고정 메모리 사용량이 있는 애플리케이션 또는 컨테이너에 대해 메모리 압축 버퍼 역할을 수행한다.
  • OOM(Out Of Memory) 상황을 예방할 수 있다.

2. Swap의 작동 방식

2.1 페이지 교체 알고리즘

리눅스 커널은 LRU(Least Recently Used) 기반의 알고리즘을 사용하여 덜 사용되는 페이지를 Swap 영역으로 이동시킨다(page-out). 필요시 다시 Swap 영역에서 가져온다(page-in).

2.2 메모리 계층

리눅스는 메모리를 다음 세 가지로 구분한다:

  • Active pages: 자주 사용되는 페이지
  • Inactive pages: 덜 사용되거나 오랫동안 사용되지 않은 페이지
  • Free pages: 할당되지 않은 RAM

Swap은 주로 Inactive pages를 대상으로 사용된다.


3. Swap의 구성 방식

3.1 Swap Partition (파티션 기반)

  • 디스크에 별도의 파티션을 할당한다.
  • 고정 크기를 가지며 안정적인 성능을 제공한다.
  • 설정 후 크기 변경이 어렵다.

3.2 Swap File (파일 기반)

  • 디스크 상의 일반 파일을 Swap 공간으로 지정한다.
  • 필요 시 Swap 크기를 동적으로 조정할 수 있다.
  • 파일시스템을 거치므로 약간 성능이 낮을 수 있다.

4. Swap 설정 방법

4.1 현재 Swap 상태 확인

swapon --show
free -h
lsblk

4.2 Swap 파일 생성 및 설정

1) 파일 생성

sudo fallocate -l 4G /swapfile

또는, fallocate를 지원하지 않는 환경에서는:

sudo dd if=/dev/zero of=/swapfile bs=1M count=4096 status=progress

2) 파일 권한 설정

sudo chmod 600 /swapfile

3) Swap 영역 초기화

sudo mkswap /swapfile

4) Swap 활성화

sudo swapon /swapfile

5) 부팅 시 자동 마운트

echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

5. 성능 조정: swappiness & cache pressure

5.1 swappiness

  • 0~100 사이의 정수값이며, Swap 사용 빈도를 제어한다.
  • 기본값은 60이며, 서버에서는 10~20 정도로 조정하는 것이 일반적이다.
cat /proc/sys/vm/swappiness
sudo sysctl vm.swappiness=10

영구 적용은 다음과 같이 설정한다:

echo 'vm.swappiness=10' | sudo tee -a /etc/sysctl.conf

5.2 vfs_cache_pressure

  • 디렉토리 및 inode 캐시를 얼마나 적극적으로 제거할지를 결정한다.
  • 기본값은 100이며, 50 정도로 낮추면 캐시 유지 시간이 증가하여 디스크 접근이 줄어든다.
cat /proc/sys/vm/vfs_cache_pressure
sudo sysctl vm.vfs_cache_pressure=50

6. Swap 파일 크기 변경

기존 Swap 제거 후 재설정

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

7. 시스템 성능에 미치는 영향

항목 영향
응답 속도 느려질 수 있음 (특히 HDD 사용 시)
I/O 병목 과도한 Swap 사용 시 디스크 병목 가능성 있음
SSD 수명 SSD 기반 시스템에서 Swap 남용 시 수명 감소 가능성 있음
시스템 안정성 적절한 Swap 설정으로 OOM 방지 가능

8. 모니터링 도구

실시간 확인 명령어

watch -n 1 free -m

vmstat

vmstat 1
  • si: swap-in
  • so: swap-out

htop / atop

  • Swap 메모리, 디스크 I/O, 프로세스 상태를 실시간으로 확인 가능하다.

9. 컨테이너 환경에서의 Swap

Docker와 Kubernetes에서는 기본적으로 Swap이 제한되거나 비활성화되어 있다. 컨테이너에서 Swap을 허용하려면 --memory-swap 옵션을 명시해야 한다.


마무리 정리

항목 요약
Swap 종류 파티션 기반, 파일 기반
설정 방법 fallocate/dd → chmod → mkswap → swapon
성능 조정 swappiness, vfs_cache_pressure
모니터링 도구 free, vmstat, htop, atop
서버 권장 설정 swappiness=10~20, 최소 Swap 사용 권장