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 사용 권장 |