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

yae*_*ael 4 rhel kernel memory swap

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

在这台服务器上消费swap的行为很奇怪

我们将其配置/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
Run Code Online (Sandbox Code Playgroud)

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

但情况并非如此

Phi*_*ing 6

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

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

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

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