目前,我遇到一个问题,程序在关闭时没有取消分配其堆栈。这似乎是 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 打开:
关闭后还有一个
这是启动时的 RAM:
系统信息:
内核:5.10.56-1-lts
弗拉瓦:拱门
台式机:i3-间隙
测试的程序:Brave、Chromium、Firefox、Ardour、Gimp、Inkscape
答案1
程序并不是“在关闭时不取消分配其堆栈”。您看到的是磁盘上的数据缓存在 RAM 中,这是正常的 - 正如您链接到的问题的答案中所解释的那样,
未使用的 RAM 是浪费的 RAM。
您不应该尝试通过删除缓存来“修复它”。如果内存变得紧张,内核会根据需要自动减少缓存数据量;在此之前,将数据存储在缓存中可以减少访问数据所需的时间。
要查看其实际效果,请尝试启动 Brave,停止它,然后再次启动它;现在停止它,删除缓存,然后再次启动它,看看需要多长时间。
程序退出时无法自动清空页面缓存;一方面,页面缓存的内容与给定进程无关。你可以限制给定进程使用的页面缓存量,方法是将其放置在组组并限制 cgroup 可以使用的内存量 - 这包括页面缓存。
答案2
你所要求的是让计算机现在忘记一些东西,以防它以后需要记住一些东西。当需要时,它会忘记缓存的数据(可以从磁盘取回的数据),但不会更早。早忘记是浪费。遗忘很便宜,所以可以在最后一刻忘记。
您误解了数据,不要将高速缓存和缓冲存储器视为“正在使用”。
答案3
对于发现此问题的其他人来说,答案似乎是配置高清参数并找到显示并取消注释的行write_cache = off
。虽然我还没有测试过,需要稍后返回结果。
正如您可能在其他技术上正确的答案中看到的那样,写读缓存作为默认设置是有原因的,并且它适合最多用例。弄乱 Linux 管理内存的方式可能会导致数据丢失和存储介质过早退化。更不用说每个人似乎都急于讨论的性能问题了。
对我来说,这些都不是问题,事实上,对非关键内存的这种忽视是可取的。