본문 바로가기
일반IT/리눅스

🐧 리눅스 서버 성능 최적화: Swappiness 설정으로 메모리 관리 효율 높이기

by gasbugs 2025. 10. 10.

안녕하세요! 오늘은 리눅스 서버를 운영하면서 알아두면 정말 유용한 메모리 관리 팁, vm.swappiness 파라미터 설정에 대해 알아보려고 합니다.

 

서버가 갑자기 느려지거나 응답이 없을 때, 혹시 메모리(RAM)는 충분한데 하드디스크만 계속 읽고 있는 상황을 겪어보신 적 없으신가요? 이럴 때 swappiness 설정을 한번 점검해 볼 필요가 있습니다.

 

이 포스팅을 통해 Swappiness가 무엇인지, 그리고 어떻게 내 서버 환경에 맞게 최적화할 수 있는지 쉽고 상세하게 알려드릴게요! 🚀

 

 

 

이해하기: vm.swappiness란 무엇일까요? 🤔

컴퓨터의 메모리(RAM)를 '책상'에, 스왑(Swap) 공간을 '서랍장'에 비유해 봅시다.

  • RAM (책상): 당장 처리해야 할 작업들을 올려두는 빠르고 효율적인 공간입니다.
  • Swap (서랍장): 책상이 꽉 찼을 때, 당장 쓰지 않는 문서들을 임시로 넣어두는 느리지만 넉넉한 공간이죠. (주로 HDD나 SSD의 일부를 사용합니다)

vm.swappiness는 리눅스 커널이 이 '서랍장(Swap)'을 얼마나 자주, 적극적으로 사용할지를 결정하는 값입니다. 0부터 100까지 설정할 수 있습니다.

  • 값이 높을수록 (기본값: 60): 책상(RAM)에 공간이 좀 있어도, "나중에 쓸 것 같아" 싶은 문서들을 미리미리 서랍장(Swap)에 옮겨 둡니다. 매우 적극적이죠.
  • 값이 낮을수록 (예: 10): 책상(RAM)이 거의 꽉 찰 때까지는 절대 서랍장(Swap)을 쓰지 않고 버팁니다. 매우 소극적입니다.

요즘처럼 RAM이 넉넉한 서버에서는, 굳이 느린 디스크를 사용하는 Swap을 자주 쓸 필요가 없습니다. 특히 데이터베이스 서버처럼 메모리 접근 속도가 중요한 서비스에서는 Swap 사용을 최소화하는 것이 성능에 유리합니다.

 

현재 설정값 확인하기 🔍

그럼 우리 서버는 지금 어떻게 설정되어 있을까요? 터미널에서 아래 명령어로 간단하게 확인할 수 있습니다.

sysctl vm.swappiness

 

또는 /proc 파일 시스템을 직접 조회해도 됩니다.

cat /proc/sys/vm/swappiness

 

아마 대부분 기본값인 60이 출력될 겁니다.

# 실행 결과 예시
vm.swappiness = 60

 

이제 이 값을 10으로 낮춰서, Swap 사용을 최소화하고 RAM을 최대한 활용하도록 설정을 변경해 보겠습니다.

 

본격적으로 설정 변경하기 🚀

설정 변경은 두 단계로 진행됩니다. 첫째는 재부팅해도 값이 유지되도록 영구적으로 변경하는 것이고, 둘째는 재부팅 없이 지금 당장 적용하는 것입니다.

1️⃣ 재부팅해도 유지되도록 영구 변경하기

시스템이 부팅될 때마다 특정 설정을 자동으로 불러오게 하려면 설정 파일에 기록해야 합니다. /etc/sysctl.d/ 디렉터리에 새로운 설정 파일을 만들어 주겠습니다. 이렇게 하면 기존의 시스템 설정 파일(sysctl.conf)을 건드리지 않고 깔끔하게 관리할 수 있습니다.

아래 명령어를 터미널에 복사하여 붙여넣으세요.

echo 'vm.swappiness = 10' | sudo tee /etc/sysctl.d/99-swappiness.conf

 

잠깐! 이 명령어가 무슨 뜻인지 자세히 알아볼까요?

  • echo 'vm.swappiness = 10': 터미널에 vm.swappiness = 10이라는 텍스트를 출력합니다.
  • | (파이프): 왼쪽 명령어의 출력 결과(텍스트)를 오른쪽 명령어의 입력으로 전달하는 연결 통로입니다.
  • sudo tee [파일명]: sudo(관리자) 권한으로 tee 명령어를 실행합니다. tee는 입력을 받아서 화면에도 보여주고 파일에도 동시에 저장하는 아주 유용한 도구입니다. 여기서는 /etc/sysctl.d/99-swappiness.conf 라는 파일을 만들고 그 안에 텍스트를 저장하는 역할을 합니다.

💡 TMI: 왜 sudo echo '...' > [파일명]을 쓰지 않나요? 리다이렉션(>)은 쉘(Shell)이 먼저 해석하는데, 이때는 아직 sudo가 적용되기 전이라 일반 사용자 권한입니다. 그래서 시스템 디렉터리(/etc/...)에 파일을 쓸 권한이 없다는 오류가 발생할 수 있습니다. sudo tee는 이런 권한 문제를 가장 확실하게 해결하는 방법입니다.

2️⃣ 재부팅 없이 즉시 적용하기

위 설정은 다음 재부팅 때부터 적용됩니다. 우리는 지금 당장 효과를 보고 싶으니, 아래 명령어로 시스템 설정 파일을 다시 불러와 현재 커널에 바로 적용시켜 줍니다.

sudo sysctl -p

-p 옵션이 바로 설정 파일들(/etc/sysctl.conf, /etc/sysctl.d/*)을 읽어서 적용하라는 뜻입니다. 명령어를 실행하면 방금 우리가 추가한 vm.swappiness = 10 설정이 화면에 보이며 적용됩니다.

 

마지막으로, 변경 사항 확인하기 ✅

모든 작업이 끝났습니다! 정말로 값이 바뀌었는지 다시 한번 확인해 보죠.

sysctl vm.swappiness

 

이제 결과는 우리가 원했던 대로 10으로 표시될 겁니다.

# 변경 후 실행 결과
vm.swappiness = 10

 

축하합니다! 이제 여러분의 리눅스 서버는 메모리를 훨씬 더 효율적으로 사용하게 되었습니다.

 

마무리하며 ✍️

오늘은 리눅스 서버의 메모리 관리 효율을 높이는 vm.swappiness 값 튜닝에 대해 알아보았습니다. 간단한 설정 변경이지만, 서버의 응답 속도와 안정성에 작지 않은 영향을 줄 수 있는 중요한 튜닝 포인트입니다.

 

물론 모든 서버에 10이 정답은 아닙니다. 서버의 역할과 메모리 용량, 워크로드에 따라 최적의 값은 달라질 수 있으니, 오늘 배운 내용을 바탕으로 여러분의 환경에 맞는 최적의 값을 찾아보는 것도 좋은 경험이 될 겁니다.


태그: 리눅스, 서버 관리, 성능 최적화, 튜닝, sysctl, vm.swappiness, 메모리 관리, Swap, DevOps, 우분투