为什么swappiness不起作用?

yae*_*ael 3 linux rhel memory swap free

我们有一台 RHEL 7 机器,只有 2G 的可用内存:

free -g
              total        used        free      shared  buff/cache   available
Mem:             31          28           0           0           1           2
Swap:            15           9           5
Run Code Online (Sandbox Code Playgroud)

所以我们决定用vm.swappiness = 100in/etc/sysctl.conf而不是 10将swappiness 增加到最大值,并用于sysctl -p应用设置。

一段时间后,我们再次检查状态:

 free -g
              total        used        free      shared  buff/cache   available
Mem:             31          28           0           0           2           2
Swap:            15           9           5
Run Code Online (Sandbox Code Playgroud)

正如我们所看到的,尽管有新的 swappiness 设置,但我们看到free -g可用 RAM 保持在 2G。为什么?这里有什么问题?

我们预计会看到 15G 的已交换。

我们还检查了:

cat /proc/sys/vm/swappiness
100
Run Code Online (Sandbox Code Playgroud)

所以一切都应该根据新设置工作,但free显示相同的情况。这是怎么回事?

Ste*_*itt 9

swappiness设置按预期工作。增加swappiness不会导致系统更喜欢交换其他任何东西;增加swappiness会影响页面缓存和交换之间的平衡。当内核需要使物理内存可用时,它可以丢弃通常使用两种策略之一:它可以从页面缓存中丢弃页面(因为它们的内容在磁盘上),或者它可以移动页面以交换;swappiness决定它对一种策略的偏爱程度。设置swappiness为 0(最小值)意味着内核将避免交换,直到它达到各种高水位线,并从页面缓存中逐出页面;将其设置为 100(最大值)意味着内核将同等考虑交换和驱逐页面缓存。

只有当内核需要更多内存时,您才会看到新设置有所不同:在缓存中使用的内存量减少之前,您会看到使用的交换量增加。

您不能使用swappiness获取内核以保持更多可用内存。物理内存总是最好使用而不是空闲,因此内核没有动力抢先释放物理内存(增加可用内存)。

有关更多信息,请参阅RHEL 7 性能调优指南