在AlmaLinux 8或CentOS 7上,vm.swappiness=0是否意味着Swap被完全禁用?

在AlmaLinux 8或CentOS 7上,vm.swappiness=0是否意味着Swap被完全禁用?

多年来我一直vm.swappiness=1在 sysctl.conf 中遇到一个问题,但即使有足够的 RAM 可用(可能在缓存方面几乎已满,虽然通常仍然有 4GB 空闲,但“可用”仍然相当空闲) ,交换区一直在使用,有时几乎已满。

我根本不想使用交换,除非绝对有必要

我刚刚读过在2019年的这个回答中那:

swappiness=0 告诉内核尽可能长时间地避免将进程交换出物理内存

不过,我也读过在这个2012年的回答中那:

交换性=0:

  • 内核版本 3.5 及更高版本:禁用交换性。
  • 早于 3.5 的内核版本:尽可能避免将进程交换出物理内存。

所以我很困惑......是否vm.swappiness=0完全禁用交换,或者在绝对必要时仍然使用交换?

我的服务器的内核版本:

  • 4.18(AlmaLinux 8)
  • 3.10(CentOS 7)

答案1

完全禁用交换的唯一方法是从一开始就不要设置它。

设置vm.swappiness为 0 将导致内核仅使用交换作为最后的手段;目前它被记录为

当值为 0 时,内核不会启动交换,直到空闲页面和文件支持页面的数量小于区域中的高水位线。

据我所知,设置swappiness为 0 从未完全禁用交换,因此如果需要,您会看到在两个环境中都使用了交换。

答案2

它不会完全禁用交换,至少不会以您可能想到的方式。如果您使系统休眠,它将使用交换。当您重新启动系统时,您可能会发现某些交换空间仍在使用中。我几天前就发现了这一点。我swappiness设置0为不使用swap,当我复活系统时,我发现swap仍然使用512K。这是在5.14.21.

相关内容