vm.swappiness在linux中是动态属性吗

vm.swappiness在linux中是动态属性吗

我的一台机器消耗了大约 120GB 或 250GB 的 RAM。我们的交换级别为 60,这意味着将发生大约 100GB 的交换。我通过 echo 1 > /proc/sys/vm/swappiness/ 更新了 swappiness 设置。但我仍然看到交换空间正在被使用。

我需要重新启动我的机器/进程才能生效吗?

答案1

该值是动态应用的,但除了该值之外,您还必须考虑以下几件事,即:

  1. 虽然 Linux 会适时地交换数据(也就是说,它会在 RAM 满之前开始将数据推出交换),但它仅按需交换数据(因此它只提取实际需要的数据)。

  2. 即使数据被换回后,副本仍保留在交换中,直到程序终止。理论上,当虚拟内存子系统发生颠簸时(即不断地将数据移入和移出交换区,因为正在运行的所有内容都不能完全放入内存中),这可以提高系统性能,因为它避免了在以下情况下再次将数据写出以进行交换的需要:它会被换掉。

  3. 即使情况 1 和 2 都不是这种情况,系统也不会立即对更改做出明显反应,因为将数据从交换移回需要时间。

现在,除了所有这些之外,还有其他一些事情需要考虑,即您的机器在内存耗尽成为合理问题之前就已经进行了交换。在大多数情况下,这意味着以下三件事之一:

  • 您正在使用内存控制组来限制某些程序的内存使用量,其中一些程序达到了控制组中的限制。
  • 您缓存了大量文件,系统出于某种原因不愿意从缓存中逐出以释放内存。
  • 非常活跃的东西分配了大量的内存(可能使用大页面),但它实际上并未使用。

在第一种情况下,调整/proc/sys/vm/swappiness不会有帮助,您需要查看控制组中设置的内存限制并进行调整(或者查看您正在运行的应用程序并找出哪个应用程序使用的 RAM 比您多)认为需要)。

在第二种情况下,增加值可能会/proc/sys/vm/vfs_cache_pressure比降低值获得更好的结果/proc/sys/vm/swappiness sysctlvfs_cache_pressure控制系统从页面缓存回收空间的积极程度。它以百分比表示,默认值为 100。我发现将其提高到 200 通常会让内核相信您确实更关心其他内存使用情况。不过,将其设置得太高会对整体性能产生负面影响(因为当无法缩小缓存时,尝试缩小缓存会浪费时间)。

第三种情况是相关程序的问题,在大多数情况下,除了向开发人员抱怨之外,您实际上无能为力。

相关内容