为什么设置 vm.watermark_scale_factor 属性会增加内存消耗?

为什么设置 vm.watermark_scale_factor 属性会增加内存消耗?

当我配置vm.watermark_scale_factor负责/etc/sysctl.conf向内核指示守护进程何时kswapd开始激活从 RAM 到磁盘的分页的属性时,发生了一些我找不到解释的事情:它增加了 RAM 内存的消耗。

如果我保留其默认值10,也就是说,kswapd当它有0.1%可用内存,conky 告诉我计算机启动时使用1.2GB内存消耗;但如果,例如,我将其设置为1000,这是它的最大值,消耗开始于2.93GB根本不需要打开任何东西。

我已经在我使用的 Liquorix 内核和 Debian 内核中尝试过这一点,结果相同。另外,当我使用 Linuxmint 时,我记得当该属性的价值增加时,消耗也会增加200

我将此属性设置为270,因为我注意到,当它设置为该值时,当交换开始时,PC 不会出现速度缓慢的情况。如果我默认将其保留在10,交换导致小幅瘫痪1015秒。

回顾一下,如果我默认将此属性保留在10它消耗1.2GB。如果我将其设置为270它消耗1.7GB如果我将其设置为1000它消耗2.9-3.0GB无需打开任何应用程序。我检查了系统监视器,没有内存消耗高的进程

首先想到的是,这是内核中的一个普遍错误。

如果这个属性只是为了激活交换守护进程,为什么消耗会增加kswapd

vm.watermark_scale_factor=270

$ free -h
               total        used        free      shared  buff/cache   available
Mem:           5,7Gi       933Mi       3,8Gi        21Mi       1,0Gi       4,1Gi
Swap:          4,8Gi          0B       4,8Gi

vm.watermark_scale_factor=1000

$ free -h
               total        used        free      shared  buff/cache   available
Mem:           5,7Gi       1,1Gi       3,6Gi        39Mi       1,0Gi       2,9Gi
Swap:          4,8Gi          0B       4,8Gi

图像为vm.watermark_scale_factor=1000

在此输入图像描述

同样显示系统监视器。所有这些消耗都没有打开任何东西。

答案1

Linux 内核中的属性vm.watermark_scale_factor控制内核如何管理系统中的可用 RAM。在内核开始释放系统中的不活动内存或文件缓存之前,增加此属性的值会设置更高的内存使用阈值。这个更高的阈值意味着内核在释放之前会在缓存中保留更多内存。

因此,如果增加该vm.watermark_scale_factor属性的值,您可能会注意到系统中 RAM 消耗的增加,因为内核将在缓存中保留更多内存。这在可用 RAM 有限的系统中尤其明显,RAM 消耗的增加可能会使系统感觉更慢,甚至导致内存短缺(在极端情况下)。

然而,值得注意的是,RAM 消耗的增加也会导致系统性能的提高,因为内核可以更快地访问缓存的数据,因此应用程序可以更快地运行。总体而言,vm.watermark_scale_factor应根据系统的需求和资源仔细调整属性的配置,以确保性能和内存可用性之间的适当平衡。

相关内容