Out of memory: Killed process 1234 (java). dmesg나 journalctl에서 이 줄을 봤다면 커널의 OOM Killer가 메모리 부족 상황에서 프로세스를 강제 종료한 것입니다. swap은 부족한 물리 메모리를 디스크로 완충해 이런 급사를 줄여줍니다. 빠르고 안전하게 swap을 추가하는 절차를 정리합니다.
1단계 — 현재 메모리·swap 상태 확인
free -h # 메모리와 swap 사용량
swapon --show # 활성화된 swap 장치·크기·우선순위
free -h의 Swap 행이 전부 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을 직접 재현하고 튜닝하는 실습은 리눅스 트랙에서 회원가입 없이 무료로 익힐 수 있습니다.