RAM이 거의 절반 정도 비어 있을 때 스왑이 사용됩니다.

RAM이 거의 절반 정도 비어 있을 때 스왑이 사용됩니다.

오늘 나는 다음과 같은 사실을 발견했습니다.

여기에 이미지 설명을 입력하세요

보시다시피 RAM은 거의 절반이 비어 있고 스왑 공간 사용량이 매우 높습니다. 내 교과서 지식에 따르면 Linux OS는 RAM을 최대한 활용하려고 시도하며 RAM이 부족해지면 가장 적게 사용되는 페이지 중 일부를 RAM에서 스왑 공간으로 이동할 것이라고 생각했습니다.

내 이론적 지식이 틀렸다면 누군가 나에게 설명하고 Linux 세계에서 실제로 어떻게 작동하는지 설명해 줄 수 있습니까?

답변1

커널이 메모리가 남아 있더라도 스왑을 사용하는 것은 사실이지만, 그 중 2/3 이상을 사용하는 것은 역사적으로 서버에 메모리가 부족하여 스왑이 시작된 것일 수 있다는 표시일 수 있습니다. 시스템에 충분한 RAM이 있는지 추론하기 위해 sar 보고서의 메모리 사용량과 스왑 사용량을 연관시킵니다. 또한 서버에 실제로 메모리가 부족하여 oom-killer가 작동했는지 확인하기 위해 dmesg 또는 로그를 확인합니다.

답변2

Linux 커널은 여유 RAM이 충분하더라도 메모리 페이지를 교체하기 시작합니다. 사용자 정의 swappiness를 설정하여 이 동작을 미세 조정할 수 있습니다.

http://en.wikipedia.org/wiki/Swappiness

서버의 경우 워크로드에 항상 충분한 메모리가 있는 경우 swappiness를 1로 설정하는 것이 좋습니다. 워크스테이션의 경우 기본값인 60을 사용하는 것이 좋습니다.

# check the current value
cat /proc/sys/vm/swappiness
60

# swappiness = 1 (swap only if necessary)
echo 1 > /proc/sys/vm/swappiness

# or use sysctl
sysctl -w vm.swappiness=1

다음을 설정하여 /etc/sysctl.conf에서 설정을 영구적으로 만듭니다.

vm.swappiness=1

그리고 그것을 다시로드

sysctl -w

답변3

불행히도 일부 응용 프로그램은 의도적으로 RAM을 건너뛰어 스왑을 직접 망치게 됩니다. 당신을 보고 있습니다, Chrome(그리고 한때 Photoshop). 이러한 응용 프로그램을 스왑하지 않도록 하는 유일한 방법은 스왑 파티션 없이 실행하는 것입니다. 심지어 swappiness 0 IIRC도 명시적으로 요구하기 때문에 여전히 액세스 권한을 부여합니다.

위의 swappiness를 변경하면 다른 모든 것에서도 작동합니다. 하지만 1 대신 10-20의 값을 제안합니다.

관련 정보