我几个月前刚换到 Ubuntu。几天前,我发现系统在内存中存储缓存,占用了大量空间,虽然我享受到了缓存的好处,但现在这却给我带来了麻烦。
从这张图片中可以看出,Ubuntu 占用了我 50% 以上的 RAM。此外,我使用了 11.6 GiB 中的 23.3%,这基本上意味着我的系统占用了 75-80% 以上的内存……
现在,我搜索了很多次如何清除缓存,我发现sync; echo 1 > /proc/sys/vm/drop_caches
具有 sudo 权限的命令可以清除缓存,但这个命令只在开始时有效,比如当我使用这个命令时,我的缓存被严重减少了。但现在,当我运行这个命令后看到我的缓存内存时,它仍然保持不变。
有人能帮我解决这个问题吗?
PS,我认为如果我尝试升级我的RAM,那将无法解决这个问题......
答案1
如果系统占用了所有的缓存空间,那么我就无法使用内存
事实并非如此。缓存 RAM 不会决定 RAM 的使用情况。您将要能够使用 RAM,这就是为什么它被称为缓存的原因——它可以根据需要使用和丢弃。事实上,这与您的假设正好相反。如果您消除缓存的 RAM,您将无法使用缓存的内容。
现在,我搜索了很多次如何清除缓存,我发现使用具有 sudo 权限的 sync; echo 1 > /proc/sys/vm/drop_caches 命令可以清除缓存,但这个命令只在开始时有效,比如当我使用这个命令时,我的缓存被严重减少了。但现在,当我运行这个命令后看到我的缓存内存时,它仍然保持不变。
如果您关闭了 swappiness,则只需手动清除缓存即可。禁用 swappiness不建议提高性能因为这实际上降低了系统性能。
与 Windows 不同,由于内存管理方面的差异,Ubuntu 不会在高 RAM 负载下崩溃。禁用这些功能将显著降低性能。
总而言之,缓存 RAM 不是正在使用的 RAM,不会耗尽 RAM 或降低系统性能,因为缓存 RAM 会根据需要自动丢弃。相反,缓存 RAM 会提高性能,因为它会在需要时使用。
答案2
缓存内存实际上是空闲内存。
一旦其他可用内存用完,它可以(并且将)免费提供给任何请求内存的进程。
同时,内核会跟踪这些空闲内存中缓存的信息。
这些信息不会被耗时的 I/O 写入某个地方。它要么已经被写入,要么被读取,并且从一开始就从未改变过。这些信息可以安全(且快速)地从内存中删除。
答案3
缓存不会对您造成任何伤害!
RAM 没有用过的通过缓存...它正在借来的通过缓存!这意味着它会在您需要时立即返回供您使用。
如果您的软件请求一个内存块,系统会说“给你”,并提供该块。如果碰巧那里有缓存,缓存的元素将被丢弃(即它们不再位于缓存中,如果需要,必须再次从磁盘中获取)。
更智能的系统将会做出明智的选择,从缓存中删除哪些元素以提供给您内存。
答案4
将空 RAM 用作 SSD 的缓存是为了加快计算机速度。如果您想每隔 x 分钟清除一次缓存,可以设置 crontab 条目来清除缓存。