如何配置缓存以在程序关闭时自动同步?

如何配置缓存以在程序关闭时自动同步?

目前,我遇到一个问题,程序在关闭时没有取消分配其堆栈。这似乎是 Linux 页面缓存的自然行为。

当我打开桌面时,它的运行速度约为 300-500MB。关闭浏览器以打开另一个 RAM 密集型程序(如 Ardour)后,我注意到用过的RAM 下降但已分配RAM 基本保持不变,或者最多下降到 2.2GB 左右。


同样的问题也在讨论中线。我发现的解决方案是运行以​​下命令,仅清除 PageCache:

sync; echo 1 > /proc/sys/vm/drop_caches

以下内容清除 dentry 和 inode:

sync; echo 2 > /proc/sys/vm/drop_caches

以下内容清除 PageCace AND dentry 和 inode:

sync; echo 3 > /proc/sys/vm/drop_caches

但是,我不想每次都运行这个。我希望我的工作空间能够自由地利用程序之间的每一点 RAM。

有没有办法在系统级别配置 PageCache,或者我是否需要做一些简单的事情,例如使用某种侦听器运行服务,然后在程序关闭时触发上述命令?


请参阅以下示例,同时 Brave 打开:

浏览器打开时 htop 的图片

关闭后还有一个

关闭浏览器后htop的图片

这是启动时的 RAM:

启动时的 htop

系统信息:

内核:5.10.56-1-lts

弗拉瓦:拱门

台式机:i3-间隙

测试的程序:Brave、Chromium、Firefox、Ardour、Gimp、Inkscape

答案1

程序并不是“在关闭时不取消分配其堆栈”。您看到的是磁盘上的数据缓存在 RAM 中,这是正常的 - 正如您链接到的问题的答案中所解释的那样,

未使用的 RAM 是浪费的 RAM。

您不应该尝试通过删除缓存来“修复它”。如果内存变得紧张,内核会根据需要自动减少缓存数据量;在此之前,将数据存储在缓存中可以减少访问数据所需的时间。

要查看其实际效果,请尝试启动 Brave,停止它,然后再次启动它;现在停止它,删除缓存,然后再次启动它,看看需要多长时间。

程序退出时无法自动清空页面缓存;一方面,页面缓存的内容与给定进程无关。你可以限制给定进程使用的页面缓存量,方法是将其放置在组组并限制 cgroup 可以使用的内存量 - 这包括页面缓存。

答案2

你所要求的是让计算机现在忘记一些东西,以防它以后需要记住一些东西。当需要时,它会忘记缓存的数据(可以从磁盘取回的数据),但不会更早。早忘记是浪费。遗忘很便宜,所以可以在最后一刻忘记。

您误解了数据,不要将高速缓存和缓冲存储器视为“正在使用”。

答案3

对于发现此问题的其他人来说,答案似乎是配置高清参数并找到显示并取消注释的行write_cache = off。虽然我还没有测试过,需要稍后返回结果。

正如您可能在其他技术上正确的答案中看到的那样,写读缓存作为默认设置是有原因的,并且它适合最多用例。弄乱 Linux 管理内存的方式可能会导致数据丢失和存储介质过早退化。更不用说每个人似乎都急于讨论的性能问题了。

对我来说,这些都不是问题,事实上,对非关键内存的这种忽视是可取的。

相关内容