为什么即使 vm.swappiness = 1 RHEL 仍使用交换?

为什么即使 vm.swappiness = 1 RHEL 仍使用交换?

RHEL 7.2 内存使用情况如下free -m

              total        used        free      shared  buff/cache   available
Mem:         386564       77941       57186         687      251435      306557
Swap:         13383        2936       16381

我们看到已用交换空间为2936M

所以我们想通过以下方式将其减少到最小值

echo 1 > /proc/sys/vm/swappiness

sysctl -w vm.swappiness=1

echo "vm.swappiness = 1" >> /etc/sysctl.conf

10 分钟后我们再次检查,但操作系统仍然使用了交换区

free -m:

              total        used        free      shared  buff/cache   available
Mem:         386564       77941       57186         687      251435      306557
Swap:         13389        2930       16381

为什么我们没有采取的行动会立即生效?

我们是否需要重新启动操作系统才能使交换空间变为0?

例子

我们跑vmstat

 vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 3  0  85740 20255872 2238248 183126400    0    0     7   162    0    0  7  1 92  0  0

我们减少 vm.swappiness=1

10 分钟后运行 vmstat:

procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 3  0  85740 20255872 2238248 183126400    0    0     7   162    0    0  7  1 92  0  0

答案1

正如您之前被告知的那样(请参阅为什么交换功能不起作用?),更改swappiness只会影响内核在需要释放内存时做出的未来决策。减少它不会导致内核重新加载已换出的所有内容。

您的vmstat输出显示交换并未被积极使用,IE您当前的工作负载确实不需要已换出的页面。

尝试按照您通常的方式对内核对交换的使用进行微观管理是没有意义的。根据您的工作负载,决定是否需要支持页面缓存,进行swappiness相应调整,然后让系统运行。

如果你真的想要清除交换,禁用它并重新启用它:

swapoff -a && swapon -a

答案2

free -m不是有关交换使用的可靠信息来源。相反,请使用虚拟机状态 之前和之后暂时改变交换性的 echo 命令。

1) swapoff -a && swapon -a && vmstat
2)做需要交换的工作
3)vmstat

现在您知道在更改 swappiness 之前进行了多少交换。如果没有交换,就寻找其他可以交换的工作。

4) 使用 echo 命令临时更改 swappiness
5)swapoff -a && swapon -a && vmstat
6)做需要交换的工作
7)vmstat

8)比较所以价值观。

需要注意的值是:

si: Amount of memory swapped in from disk (/s).
so: Amount of memory swapped to disk (/s).

您还可以在以下位置找到有用的信息RHEL 7 性能调优指南

非常感谢斯蒂芬·基特提醒我关于交换和交换。

相关内容