리눅스에서 스왑 사용 관리하기
당신의 리눅스 시스템에서 시스템 지연, 높은 스왑 사용 또는 낮은 메모리 문제를 경험했을 수 있습니다. 일반적인 조언은 “스왑니스 값을 줄이는 것”인데, 이는 스왑 사용량을 줄이는 것입니다. 하지만 스왑니스란 무엇일까요? 그리고 실제로 조정하는 것이 좋을까요?
참고: 우리는 스왑 파티션에 대한 세부 사항에 들어가지 않을 것입니다. 리눅스의 스왑 파티션에 대해 알아야 할 모든 것을 우리의 기사에서 읽을 수 있습니다.
스왑니스
UNIX 유사 시스템에서는 메모리 페이지가 어떻게 처리될지를 결정하는 스왑니스라는 값이 있습니다. 대부분의 시스템에서 기본값은 “60”이며, 0과 100 사이의 어떤 값으로도 설정할 수 있습니다. 메모리가 부족해지면, 커널은 프로세스에 더 많은 무료 RAM을 제공하기 위해 일부 파일 캐시를 제거하거나 프로세스 페이지를 RAM에서 디스크로 스왑합니다.
기본값이 60인 경우, 스왑을 덜 사용하고 I/O 캐시가 RAM 재배치를 위해 더 자주 해제됩니다. 캐시를 제거하는 것은 “더 저렴하다”(자원 집약적이지 않음)고 여겨지며, 페이지를 스왑하는 것은 디스크 읽기 및 쓰기를 포함하여 “더 비쌉니다.” 스왑니스 값이 ‘60’인 경우, 스왑 사용은 캐시 재사용보다 약간 낮습니다. 스왑니스 값을 100으로 높이면 스왑과 파일 캐시 제거가 동일한 비율로 사용됩니다. 이는 기본값보다 더 많은 스왑과 더 빠른 I/O를 의미합니다. “10”과 같은 낮은 값은 스왑 사용을 훨씬 줄이고, 프로세스를 위해 I/O 캐시가 훨씬 빨리 제거될 수 있습니다. 이는 상호작용성을 증가시킬 수 있지만, I/O 속도에 악영향을 줄 수도 있습니다.
스왑니스 감소
웹사이트와 포럼에서는 스왑니스 값을 “10” 정도로 줄이라는 조언을 자주 보게 됩니다. 이는 스왑 사용을 줄이고 더 많은 프로세스를 물리적 RAM에 유지하여 시스템 속도를 높이기 위한 것입니다. 이러한 논리는 다소 단순할 수 있으며 모든 상황에 맞는 “원 사이즈 핏 올” 솔루션이 아닐 수 있습니다.
스왑니스 값을 줄이는 것이 좋은 경우는 다음과 같습니다:
- 데이터베이스 시스템이나 데이터베이스 집약적 애플리케이션을 많이 사용하는 경우: 데이터베이스는 일반적으로 OS보다 파일 캐싱을 훨씬 더 잘 처리합니다. 스왑니스를 줄이면 OS의 파일 캐싱을 제한하여 데이터베이스가 자신의 캐시를 처리할 수 있는 기회를 제공합니다.
- 상호작용성 개선을 위해: 멀티태스킹을 많이 하지만 파일을 적게 다루거나 큰 문서를 열지 않는 경우, 시스템의 부드러운 느낌을 개선할 수 있습니다. 적은 프로세스가 디스크에 기록되고 RAM 접근이 훨씬 빠르기 때문에 컴퓨터가 더 빨리 느껴질 수 있습니다. 그러나 이는 I/O 성능을 저하시킬 수 있음을 명심해야 합니다. 디스크가 느리거나 I/O 집약적인 작업을 수행하는 경우, 성능이 손상될 수 있습니다.
- 플라세보 효과: 많은 사람들이 낮은 스왑니스가 시스템 속도를 높일 것이라고 믿습니다. 진지하게, 시스템이 더 빠르다고 느낀다면, 그것은 실제로 그 속도가 더 빠르다고 인식하는 효과를 낼 수 있습니다.
스왑니스를 줄이면 시스템이 메모리를 해제하기 위해 랜덤으로 프로세스를 종료하는 충돌이 발생할 수 있습니다. 스왑니스 값을 줄이는 것이 시스템을 원활하게 실행할 수 있는 충분한 RAM이 있을 때 가장 좋습니다. 그러나 “10” 이상으로 값을 유지해야 하며, 일부 스왑 사용은 유용합니다.
스왑니스 증가
스왑니스 값을 증가시키는 것은 일반적으로 I/O 속도를 높이는 장점이 있습니다. 자주 권장되지는 않지만, 스왑니스 값을 높이는 것이 유용할 수 있는 경우는 다음과 같습니다:
- I/O 집약적인 작업을 수행하고 느리거나 오래된 HDD를 사용하는 경우: 예를 들어, 백업이나 배치 이미지 편집은 I/O 집약적일 수 있습니다(눈에 띄는 예외는 본래 I/O 집약적이지만 낮은 스왑니스 값을 이점으로 가질 수 있는 데이터베이스입니다).
- 메모리가 부족하지만 상대적으로 빠른 디스크가 있는 경우: 이러한 상황에서는 높은 스왑니스 값이 메모리를 더 효율적으로 처리하는 데 도움이 될 수 있습니다(하지만 너무 높게 설정하면 다시 성능이 저하될 수 있습니다).
스왑니스 관리 방법
먼저 이 값을 수정할 필요가 있는지 고려해야 합니다. 성능 문제를 경험하고 있습니까? 그리고 더 중요한 것은, 다른 시스템 조정을 시도해본 적이 있습니까? 그렇지 않다면, 먼저 다른 방법을 찾아보는 것이 좋습니다. 그러나 특정 시나리오가 생각난다면 계속 진행할 수 있습니다.
다음으로, 스왑 사용이 얼마나 높은지 확인해야 합니다. 원하는 성능 모니터링 도구를 사용하거나 free 명령어로 확인할 수 있습니다. free -m은 메가바이트 단위의 메모리 사용 스냅샷을 제공합니다. 지속적인 모니터링을 원하신다면 watch를 사용할 수 있습니다.
watch -n1 free -m이 명령은 매초마다 free -m 명령을 실행하고 “Ctrl + C”를 누를 때까지 그 출력을 인쇄합니다.

위에서 보시는 것처럼, 이 기사가 작성된 시스템은 매우 적은 스왑을 사용하고 있습니다.
만약 스왑을 경험하고 있다면, 얼마나 많은 스왑이 활성화되어 있는지 궁금할 수 있습니다. 명령어 vmstat는 시스템의 가상 메모리 사용(스왑 및 물리적 RAM)을 알려줍니다.
vmstat 1
si는 “스왑 인”, so는 “스왑 아웃”을 의미하는 swap 열을 확인해야 합니다. 숫자가 높으면 많은 스왑 활동이 있다는 것을 의미하며, 이는 낮은 메모리 문제의 지표입니다. free에서 스왑 사용을 보지만 활성 스왑이 적다면, 스왑니스를 조정할 수 있습니다.
디스크 I/O, 부하 평균 등과 같은 다른 성능 기준을 설정하는 것도 좋은 아이디어입니다. 새로운 스왑니스 값을 테스트할 때 비교할 수 있는 무언가가 생깁니다.
다른 스왑니스 값을 테스트하려면, sysctl 명령어로 임시로 설정할 수 있습니다. 이는 재부팅이 필요 없고 효과는 즉각적입니다. 사실, 재부팅하면 기본값이 복원되므로 실험하기에 매우 안전합니다:
sudo sysctl vm.swappiness=10물론 “10” 대신에 원하는 값을 입력할 수 있습니다( “0”과 “100” 사이).
원하는 값을 찾은 후에는 “/etc/sysctl.conf” 파일을 편집하여 시스템 구성을 영구적으로 변경할 수 있습니다.
sudo nano /etc/sysctl.conf그리고 파일의 끝에 다음 줄을 추가합니다
# 스왑니스 값 설정
vm.swappiness=10이때, 값은 다시 한 번 당신의 선호 값으로 설정해야 합니다.
결론
스왑니스를 “10”으로 낮추는 것은 자주 모든 상황에 적합한 솔루션으로 권장되지만, 실제로 이 기술을 사용하는 것은 다소 복잡할 수 있습니다. 기준을 설정하고, 시스템과 사용하는 방법, 필요성을 이해함으로써, 스왑 사용을 미세 조정하고 성능(상호작용성 또는 I/O)을 향상시킬 수 있습니다.