多年来我一直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
.