CentOS7/RHEL7如何修改swappiness值?

示例:修改swappiness值為0

永久配置方法:

sysctl -w vm.swappiness=0

echo vm.swappiness = 0 >> /etc/sysctl.conf

臨時配置方法:

sysctl -w vm.swappiness=0

手動更改/sys/fs/cgroup/memory下子目錄對應的memory.swappiness值

臨時配置後可能出現的故障描述:

    物理記憶體還比較充足,vm.swappiness已經設置為0,但系統還是用了swap分區

故障原因

    根因是虛擬機machine.slice和系統system.slices、user.slices等使用了swap空間。

直接原因

    通過sysctl -w設置vm.swappiness並不能改變cgroup中machine.slice、system.slices、user.slices等裡面對應的memory.swappiness值,這些值繼承/sys/fs/cgroup/memory下vm.swappiness的值,當創建子目錄後,再創建子目錄,此時vm.swappiness的值繼承於父目錄里對應的vm.swappiness值,因此,在系統運行時,只改變/sys/fs/cgroup/memory這個根目錄的值,並不影響已創建子目錄的vm.swappiness配置,所以如果需要更改,就要手動操作。

總結

    正常情況下,如果在sysctl.conf中配置了vm.swappiness的值,重啟之後,所有配置都是新值,但如果手動動態更改,就需要手動更改/sys/fs/cgroup/memory下子目錄對應的memory.swappiness值。