swappiness=1로 구성했음에도 불구하고 스왑이 여전히 높습니다.

swappiness=1로 구성했음에도 불구하고 스왑이 여전히 높습니다.

문 서버 버전이 있습니다rhel 7.5

이 서버에서 스왑을 사용하면 이상하게 동작합니다.

1로 구성 /proc/sys/vm/swappiness하고 서버를 다시 시작합니다.

하지만 서버가 15G를 소비하는 반면 사용 가능한 공간은 44G임을 알 수 있습니다!

어떻게 그럴 수 있습니까?

[root@moon01 network-scripts]# more /proc/sys/vm/swappiness
1
[root@moon01 network-scripts]# free -g
              total        used        free      shared  buff/cache   available
Mem:            125          80          38           0           6          44
Swap:            15          15           0

내가 이해한 바로는 마지막 몇 기가바이트에 가까운 메모리를 사용할 수 있을 때만 스왑이 증가합니다.

하지만 그건 사실이 아니야

답변1

Linux 에서도 swappiness=1가능한 경우 스왑이 계속 사용됩니다. 사용자 공간 프로그램은 교체를 시작하기 위해 사용 가능한 RAM 코어를 모두 소모할 필요가 없습니다. 나는 이것을 처음 발견했기 때문에Ubuntu Linux 데스크탑에 문제가 있습니다.

내 질문에 대한 답변과 의견에서 누군가 디스크 캐시를 가능한 원인으로 지적했습니다. 메모리의 "여유" 공간은 비어 있는 경우가 거의 없습니다. 커널은 애플리케이션에 더 많은 메모리가 필요할 때마다 캐시를 ​​포기할 수 있다는 것을 알고 있기 때문에 이를 캐시(디스크 캐시 포함)에 조용히 사용합니다.

커널 도커에서 참조를 찾고 있습니다. 그러나 좋은 설명이 있습니다. 대부분의 프로그램에는 시작 중에만 사용되고 다시는 사용되지 않는 많은 메모리(코드 포함)가 있습니다. 따라서 특히 서버에는 메모리에 "정크"가 많아 디스크 캐시와 같은 유용한 것에서 공간을 훔칩니다. Linux는 이를 알고 있으며 디스크 캐시의 페이지를 삭제하는 대신 쓰레기를 교체하기로 선택합니다. 전체적으로 이것은 스왑 사용량을 점차적으로 증가시키고 캐시 크기를 천천히 증가시킵니다. "사용 가능한" 메모리가 여전히 비교적 높은 경우에도 이 작업을 수행합니다.

간단히 말해서 이는 예상된 동작이며 이를 끌 수 있는 쉬운 방법은 없습니다.

관련 정보