리눅스맨

swappiness 설정 잘못된 상식

스왑 파일을 사용하기 위해서 인터넷을 검색해보면

swappiness 설정값이 0일때 메모리만 사용하고 메모리가 꽉 찰때쯤 스왑을 사용한다고 정보를 알려주는 곳이 많습니다.
또 반대로 swappiness 설정값이 100일때 메모리를 사용하지않고 스왑파일을 먼저 사용한다는 정보가 상당하더군요.

그래서 제 경우에는 메모리를 최대한 사용하지않고 스왑파일만 사용하도록 설정하려고 100 값을 주었습니다.

결과는 이렇습니다.

인터넷을 너무 맹신하다가는 이러한 결과를 만들게됩니다.

그렇게 검색을 하는 도중 조금 의아한 정보를 제공하는 곳이 있더군요.

남들 10명이면 10명 모두 0은 RAM을 사용하고 100은 스왑파일을 먼저 사용한다는 글과 다르게

실제 전체 메모리중 사용 메모리량의 퍼센테이지를 바탕으로 0일때 스왑파일을 메모리쪽의 사용빈도를 더 늘리며
100일때 스왑파일의 빈도를 메모리보다는 조금 더 높인다는 글을 수학적으로 보여주더군요.

cat /proc/sys/vm/swappiness
60

기본값이 60으로 설정되어져있지만 제 서버는 100% 스왑만 사용하고 싶어 100으로 수정하였습니다.

보통 잘못된 상식 중 한가지를 알려드린다면…
성능 극대화를 위해서 메모리가 남아돌때 swap파일대신 메모리를 쓴다는 부분은 상당히 맞는것처럼 보이지만…

메모리 100% 누수로 인해 mysql 셧다운이 되어 홈페이지가 돌아가지 않는다면 성능 극대화가 과연 필요할까요?

제가 운영하는 AWS EC2 서버는 메모리가 2GB인 small t3타입의 vCPU입니다.

평소 운영하는 워드프레스가 여러사람들의 동시 다발적인 데이터베이스 호출로 인해 갑자기 메모리가 부족해진상태로

렉이 걸리게된다면 서비스가 멈춰버리게됩니다.

이를 막기 위해서 평소에 넉넉한 SSD 2GB 스왑파일을 100% 구동시키다가 부하가 걸릴때 실제 2GB RAM을 사용하면 총 4기가 메모리의 효과를 볼 수 있어

오히려 이 방법이 성능을 더 극대화 시킬것으로 예상하였지만 100을 설정한다고 하여 스왑파일을 우선적으로 사용하진 않았습니다.

vi /etc/sysctl.conf

vm.swappiness = 100

#스왑파일 사용빈도 (100에 가까울 수록 스왑파일을 최대한 사용하려고 함)

vm.vfs_cache_pressure = 10000

#반환빈도 (100 이상이 되면 최대한 빠르게 반환하려고 함)

echo 100 > /proc/sys/vm/swappiness

echo 10000 > /proc/sys/vm/vfs_cache_pressure

reboot

재부팅하고나면 swap 비중이 100으로 잡혀져있습니다.

그리고 만족수준은 아니지만 스왑파일도 메모리의 어느도달 지점에 도착하니 자동으로 조금씩 늘어나더군요.

 

이정도라도 부하는 어느정도 견딜것으로 보입니다.

 

메모리 1기가 micro 타입과 메모리 2기가 small 타입 이렇게 비교해가면서 개인적으로 몇대를 운영하고 있는데

현재는 스왑파일 빈도 설정값 100 으로 해놓고 만족하고 있습니다.

 

인터넷 너무 맹신하지 않고 직접 실험해보고 결과를 찾는 방법으로 진행하는 중입니다.

 

아 그리고! vfs_cache_pressure 값이 높을 수록 반환하려고 하는 정보가 있어 10000정도로 잡아놓았습니다.

 

캐시는 빨리 빨리 반환시키고 메모리는 항상 여유있게 대규모 사람들을 준비해야하는것이 성능 극대화라고 생각합니다.

 

 


게시됨

카테고리

,

작성자

태그: