RAM이 완전히 가득 찼을 때만 시스템이 스왑을 사용하도록 하려면 어떻게 해야 합니까?

RAM이 완전히 가득 찼을 때만 시스템이 스왑을 사용하도록 하려면 어떻게 해야 합니까?

과거에는 vm.swappiness로 설정하면 0RAM이 완전히 가득 찼을 때만 시스템이 교체된다는 의미였습니다.

$ cat /etc/sysctl.d/99-sysctl.conf
kernel.sysrq = 1
vm.swappiness=0
$ sysctl vm.swappiness
vm.swappiness = 0

그러나 최근에는 이 설정을 사용하면 스와핑이 지워진 지 몇 초 후에도 여전히 스와핑이 가능합니다 sudo swapoff -a; sudo swapon -a. 예를 들어, 몇 시간 후에

$ free -m
        total   used   free   shared  buff/cache  available
Mem:    32047   7914    325     1509       23807      22177
Swap:    1974   1974      0

따라서 22177MiB가 있습니다 available. 에서 man free:

쓸 수 있는

스왑 없이 새 응용 프로그램을 시작하는 데 사용할 수 있는 메모리 양을 추정합니다.

그러나 내 시스템은 1974MiB의 스왑 공간을 사용하고 속도가 느려지는 등 여전히 많은 스왑을 수행합니다.

vm.swappiness으로 설정해 보았지만 1비슷한 결과가 나왔습니다. 또한 최신 LTS 4.19.17-1, 4.19.16-1-lts, 4.19.15-1-lts 및 기타 여러 LTS 버전과 메인라인 4.18.16.arch1-1을 포함한 다양한 커널을 사용해 보았습니다. 방법 불필요한 시스템 교체를 방지하시겠습니까?

확실히최신 버전의 커널에서 이를 설정하면 vm.swappiness = 0"사용 가능한 페이지 및 파일 지원 페이지 수가 해당 지역의 최고 수위 표시보다 작아질 때까지 스왑을 시작하지 않는다"는 의미입니다. 이 "하이 워터 마크"가 무엇인지는 잘 모르겠지만 여유 메모리가 많이 있습니다! 다른페이지제안OOM 킬러이런 일이 발생하면 호출됩니다(교환 자체가 아님). RAM 없이 스왑을 차단하고 OOM 종료가 발생하는 것을 방지할 수 있습니까(RAM과 스왑이 모두 가득 차지 않은 경우)?

관련 정보