← 아티클 목록

리눅스 swap 설정과 OOM 완화 — swapon·swappiness 정리

2027-05-31#linux#메모리#운영

Out of memory: Killed process 1234 (java). dmesgjournalctl에서 이 줄을 봤다면 커널의 OOM Killer가 메모리 부족 상황에서 프로세스를 강제 종료한 것입니다. swap은 부족한 물리 메모리를 디스크로 완충해 이런 급사를 줄여줍니다. 빠르고 안전하게 swap을 추가하는 절차를 정리합니다.

1단계 — 현재 메모리·swap 상태 확인

로컬 터미널
free -h             # 메모리와 swap 사용량
swapon --show       # 활성화된 swap 장치·크기·우선순위

free -hSwap 행이 전부 0이면 swap이 아예 없는 상태입니다. 클라우드 인스턴스는 기본적으로 swap이 없는 경우가 많습니다.

2단계 — swap 파일 생성

파티션을 새로 자르기 어려운 환경에서는 swap 파일이 가장 간단합니다. 메모리의 1~2배를 흔히 잡습니다.

로컬 터미널
sudo fallocate -l 2G /swapfile     # 2GB 파일 생성
sudo chmod 600 /swapfile           # 소유자만 접근(보안 필수)
sudo mkswap /swapfile              # swap 영역으로 포맷

chmod 600을 빠뜨리면 swapon이 "insecure permissions" 경고를 내거나 거부합니다.

3단계 — 활성화 (swapon)

로컬 터미널
sudo swapon /swapfile
swapon --show                      # 잘 붙었는지 확인
free -h                            # Swap 행에 2.0Gi 표시 확인

4단계 — swappiness 조정

swappiness는 커널이 얼마나 적극적으로 swap을 쓸지 정하는 값(0100)입니다. 값이 낮을수록 물리 메모리를 최대한 쓰고 swap은 마지막에 씁니다. 서버는 보통 1020이 적당합니다.

로컬 터미널
cat /proc/sys/vm/swappiness        # 현재 값(기본 60)
sudo sysctl vm.swappiness=10       # 즉시 적용(재부팅 시 사라짐)

영구 적용하려면 /etc/sysctl.d/에 등록합니다.

로컬 터미널
echo 'vm.swappiness=10' | sudo tee /etc/sysctl.d/99-swap.conf

5단계 — 재부팅 후에도 유지 (fstab)

swapon만으로는 재부팅 시 사라집니다. /etc/fstab에 등록해야 영구적입니다.

로컬 터미널
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

점검 순서

로컬 터미널
free -h                            # 현재 메모리·swap
sudo fallocate -l 2G /swapfile && sudo chmod 600 /swapfile
sudo mkswap /swapfile && sudo swapon /swapfile
sudo sysctl vm.swappiness=10       # swap 적극도 낮춤
# /etc/fstab 등록으로 영구화

swap은 OOM을 늦추는 완충재이지 부족한 메모리의 근본 해결책은 아닙니다. swap을 과도하게 쓰면 디스크 I/O 때문에 서비스가 느려지므로, 반복된다면 메모리 증설이나 프로세스 튜닝이 답입니다.


OOM·메모리·swap을 직접 재현하고 튜닝하는 실습은 리눅스 트랙에서 회원가입 없이 무료로 익힐 수 있습니다.