왜 스왑 기능이 작동하지 않나요?

왜 스왑 기능이 작동하지 않나요?

사용 가능한 RAM이 2G에 불과한 RHEL 7 시스템이 있습니다.

free -g
              total        used        free      shared  buff/cache   available
Mem:             31          28           0           0           1           2
Swap:            15           9           5

vm.swappiness = 100그래서 우리는 /etc/sysctl.conf10 대신 in을 사용하여 swappiness를 최대로 늘리기로 결정하고 sysctl -p해당 설정을 적용했습니다.

잠시 후 상태를 다시 확인합니다.

 free -g
              total        used        free      shared  buff/cache   available
Mem:             31          28           0           0           2           2
Swap:            15           9           5

보시다시피, 새로운 스왑 가능성 설정에도 불구하고 free -g사용 가능한 RAM은 2G로 유지됩니다. 왜? 여기에 문제가 있나요?

우리는 15G를 볼 것으로 예상합니다사용된교환.

우리는 또한 다음 사항을 확인했습니다.

cat /proc/sys/vm/swappiness
100

따라서 모든 것이 새로운 설정에 따라 작동하지만 free동일한 상황을 보여야 합니다. 어떻게 되어가나요?

답변1

설정 swappiness이 예상대로 작동하고 있습니다. 증가로 인해 swappiness시스템이 다른 것보다 스왑을 선호하게 되는 것은 아닙니다. 증가는 swappiness페이지 캐싱과 스왑 간의 균형에 영향을 미칩니다. 커널이 물리적 메모리를 사용 가능하게 해야 하는 경우 일반적으로 두 가지 전략 중 하나를 사용하여 삭제할 수 있습니다. 즉, 페이지 캐시에서 페이지를 삭제할 수 있습니다(해당 내용이 디스크에 있기 때문에). 또는 페이지를 스왑하기로 swappiness결정합니다 . 한 전략을 다른 전략보다 선호하는 정도입니다. 0(최소값)으로 설정하면 swappiness커널은 다양한 하이 워터마크에 도달할 때까지 스왑을 방지하고 페이지 캐시에서 페이지를 제거합니다. 100(최대값 1)으로 설정하면 커널이 스왑과 스왑을 동일하게 고려한다는 의미입니다. 페이지 캐시.

커널에 더 많은 메모리가 필요할 때만 새 설정의 영향을 볼 수 있습니다. 즉, 캐시에 사용되는 메모리 양이 감소하기 전에 스왑 사용량이 증가하는 것을 볼 수 있습니다.

swappiness커널이 더 많은 메모리를 사용 가능하게 유지하도록 할 수는 없습니다 . 물리적 메모리는 항상 무료보다는 사용하는 것이 가장 좋습니다. 따라서 커널은 물리적 메모리를 선제적으로 해제(사용 가능한 메모리 증가)할 인센티브가 없습니다.

바라보다RHEL 7 성능 조정 가이드더 많은 정보를 알고 싶습니다.


¹ RHEL 7에서는 최신 커널은 최대 200의 값을 허용하며 이는 RAM 기반 스와핑에 유용합니다.

답변2

해결책은 다음을 추가하는 것입니다 vm.watermark_scale_factor(훌륭함기사이 주제에 대해)

sudo sysctl -w vm.watermark_scale_factor=1000당신이 찾고 있는 효과가 있어야 합니다:

사용 가능한 메모리가 10% 미만으로 떨어지면 10 := watermark_scale_factor / 100커널이 깨어납니다 (여기서).스와푸드따라서 메모리 페이지는 스왑 영역으로 스왑됩니다(또는 캐시 페이지는 폐기됩니다.이것실제로는 다릅니다 vm.swappiness) 여유 메모리가 20%에 도달할 때까지

유용한 참고자료:https://www.kernel.org/doc/Documentation/sysctl/vm.txt

관련 정보