尽管配置为 swappiness=1,但交换仍然很高

尽管配置为 swappiness=1,但交换仍然很高

我们有月球服务器版本rhel 7.5

在这台服务器上消耗交换的行为很奇怪

我们将其配置/proc/sys/vm/swappiness为1并重新启动服务器

但我们可以看到服务器正在消耗 15G,而可用空间是 44G!

怎么可能?

[root@moon01 network-scripts]# more /proc/sys/vm/swappiness
1
[root@moon01 network-scripts]# free -g
              total        used        free      shared  buff/cache   available
Mem:            125          80          38           0           6          44
Swap:            15          15           0

据我了解,只有当可用接近最后几千兆内存时,交换才会增加

但情况并非如此

答案1

即使使用swappiness=1Linux,如果可用,也会继续使用交换。您的用户空间程序不需要耗尽可用 RAM 内核即可开始交换。我第一次发现这个是因为我在 Ubuntu Linux 桌面上遇到问题

在对我的问题的回答和评论中,有人指出磁盘缓存是可能的原因。内存中的“空闲”空间很少是空的。内核会悄悄地将其用于缓存(包括磁盘缓存),因为它知道每当应用程序需要更多内存时它就可以放弃缓存。

我正在内核坞中寻找参考。但是有一个很好的描述,大多数程序将拥有大量内存(包括代码),这些内存仅在启动期间使用,然后再也不会使用。因此,特别是在服务器上,内存中会有大量“垃圾”,从磁盘缓存等有用的东西中窃取空间。 Linux 知道这一点,并且会选择换出垃圾,而不是放弃磁盘缓存中的页面。总而言之,这会逐渐增加交换使用量并缓慢增加缓存大小。即使“可用”内存仍然相对较高,它也会这样做。

简而言之,这是预期的行为,没有简单的方法可以将其关闭。

相关内容