
vm.swappiness는 0부터 100까지의 값을 가지는 Linux 커널 파라미터로, 애플리케이션 데이터(익명 페이지 형태)를 물리 메모리에서 디스크의 가상 메모리로 스왑(swap) 하는 동작을 제어합니다. 이 값을 조정함으로써 스왑을 최소화할 수 있습니다.
값이 높을수록(예: 60~100) 비활성 프로세스가 더 적극적으로 스왑되며,
값이 낮을수록(예: 0~10) 스왑이 덜 발생하고, 대신 파일 시스템 버퍼가 먼저 비워집니다.
대부분의 시스템에서는 기본적으로 vm.swappiness 값이 60으로 설정되어 있습니다.
그러나 이는 Hadoop 클러스터 환경에는 적합하지 않습니다.
메모리가 충분한 상황에서도 프로세스가 스왑되는 경우가 있어, 시스템 데몬에 대한 GC(Garbage Collection) 지연이 발생할 수 있고, 이는 시스템 안정성과 성능 저하로 이어질 수 있습니다.
Cloudera는 RHEL 커널 버전이 2.6.32-642.el6 이상일 경우,
vm.swappiness 값을 1에서 10 사이(가능하면 1) 로 설정하여 최소한의 스왑이 이루어지도록 권장하고 있습니다.
To view your current setting for vm.swappiness, run:
cat /proc/sys/vm/swappiness
To set vm.swappiness to 1, run:
sudo sysctl -w vm.swappiness=1
To ensure persistence of the vm.swappiness value after reboot:
echo 'vm.swappiness=1' > /etc/sysctl.d/90-cloudera-swappiness.conf

Swap은 Linux에서 물리 메모리(RAM)가 부족할 경우, 디스크의 일부를 가상 메모리처럼 활용하기 위한 영역이다. 운영체제는 메모리 압박이 발생했을 때, 사용 빈도가 낮은(비활성) 메모리 페이지를 swap 공간으로 밀어내고, 그만큼의 물리 메모리를 확보한다. 이 과정을 통해 시스템이 메모리 부족으로 인한 크래시를 피할 수 있도록 한다.
예를 들어, 시스템에 60GB의 RAM과 8GB의 swap이 설정되어 있다고 가정한다. 일반적으로 대부분의 데이터는 RAM 상에서 처리되지만, 메모리 사용량이 임계치에 도달하면 커널은 비활성 데이터를 swap으로 이동시킨다. 이 때 디스크 I/O가 발생하게 되고, 이는 RAM보다 속도가 느리기 때문에 성능 저하의 주요 원인이 될 수 있다.
또한 JVM 기반 애플리케이션의 경우, 메모리가 swap으로 밀려나면 GC(Garbage Collection) 성능이 급격히 저하될 수 있으며, 이는 전체 시스템 성능에 악영향을 준다.
장점 시스템이 메모리 부족 상황에서도 동작 지속 가능
단점 디스크 기반이라 속도가 느림. 자주 사용되면 성능 저하 유발
비고 메모리가 충분한 시스템에서는 거의 사용되지 않도록 설정하는 것이 이상적
일반적으로 메모리가 32GB 이상인 서버에서는 swap을 거의 사용하지 않도록 설정하는 것이 권장된다. Cloudera, Red Hat, Oracle 등 주요 벤더에서도 "메모리가 충분할 경우 swap은 최소한으로 구성하라"고 권장하고 있으며, Hadoop 또는 Oracle DB와 같은 시스템에서는 swap 사용이 GC 지연 및 데몬 응답 저하를 유발할 수 있기 때문이다.
60GB RAM 시스템에서 swap을 8GB 설정하는 것은 실무적으로 적절한 수준이며, 백업적인 용도로만 활용되도록 관리하는 것이 이상적이다.
free -m
swapon -s

cat /proc/sys/vm/swappiness
sysctl -w vm.swappiness=1
-영구 설정 (예: /etc/sysctl.conf에 추가)
vm.swappiness = 1
서버의 swap 공간은 비상용 완충장치로 이해하는 것이 좋으며, 메모리가 충분한 서버에서는 최대한 적게, 또는 아예 사용되지 않도록 관리하는 것이 중요하다. 성능 민감한 시스템에서는 vm.swappiness를 1로 설정해 swap 발생 빈도를 최소화하고, 필요시 swap 공간을 완전히 비활성화하는 방안도 고려할 수 있다.
