当物理内存足够时,如何防止 Ubuntu 进行交换?

当物理内存足够时,如何防止 Ubuntu 进行交换?

我有一个 Ubuntu 20.04 桌面系统,具有 16 GB 的物理内存和 8 GB 的交换空间。

在正常运行一段时间并进行了一些高负荷使用后,我注意到交换空间几乎已完全使用,而物理内存仅略低于 50%。与此同时,我注意到,当返回到在后台运行时间较长的应用程序时,性能不佳,磁盘震颤频发 - 显然系统正忙于从交换中读取内存页面。

然后,我尝试通过运行强制将所有内容重新放入物理内存中swapoff -a; swapon -a(这会使内存使用率短暂地超过 90%)。但是,一旦重新启用交换,我注意到系统立即开始将页面移回交换,直到交换使用率达到约 60%。

在我看来这有点低效,并且我希望在库存持续时将数据保存在内存中,以避免当我再次需要它们时从交换中读取页面的开销。

我如何影响这种行为?我已经看到提到了 swappiness 参数,但据我了解,它只是为系统提供了从物理内存中逐出页面的顺序,而不是开始逐出页面的速度。

答案1

这就是 Linux 节约内存的做法。在某个时候,您的内存使用率很高。因此,Linux 将内存交换到磁盘。当稍后您的内存需求减少时,Linux 将交换留在磁盘上,因此内存可用于磁盘缓存以及您正在执行或计划执行的任何其他操作。只有当您需要驻留在交换空间中的内存时,Linux 才会从交换中检索它。不会更早。因为您反正也不需要它。

有效降低swappiness将减少操作系统将页面交换到磁盘的倾向,并增加操作系统将磁盘文件缓存到内存的倾向。

这只是为系统提供了从物理内存中逐出页面的顺序,而不是开始逐出页面的时间

我认为这并不完全正确。内存管理是复杂的这是 Linux 文档中的定义来源

“此控制用于定义内核交换内存页面的积极程度。较高的值将增加积极性,较低的值将减少交换量。值为 0 指示内核在空闲和文件支持页面的数量小于区域中的高水位标记之前不启动交换。

您确实可以降低 swappiness:这将降低系统换出分页内存的倾向。作为回报,您的硬盘将有更多工作来物理写入文件,因为这些文件将被缓存更少。对磁盘压力的净影响取决于实际使用情况。

相关内容