为什么我的系统使用了这么多缓存?

为什么我的系统使用了这么多缓存?

以前,在我运行 Ubuntu 14.04 的台式电脑上,我有 4GB 的 RAM,我认为这应该足够了。但是,运行一段时间后,我的电脑似乎变慢了。我的 Gnome 面板中有一个系统资源监视器应用程序,我猜它代表了可用的 RAM (?)。它显示深绿色区域为“内存”,浅绿色区域为“缓存”。“缓存”会慢慢增长,直到填满整个图表,然后程序加载速度会变慢,或者切换程序需要一段时间。

我可以使用此命令稍微缓解该问题,但最终计算机缓存会再次填满,因此它只是一个创可贴:

sudo sh -c "sync; echo 3 > /proc/sys/vm/drop_caches"

因此,我认为我应该获得更多的 RAM,所以我用一根 8GB 的​​内存条替换了一根 2GB 的内存条,现在我有 10 GB 的内存。

我的“缓存”仍然慢慢地达到最大值,结果就是我的电脑变慢了。另外,有时我第一次启动和登录时,电脑的“缓存”就达到最大值。但并非总是如此,我不知道是否有某种模式可以确定为什么会发生这种情况。

为什么 Ubuntu 占用了这么多缓存?10GB 对 Ubuntu 来说不够吗?

以下是我的 Gnome 面板中的系统监视器。中间的方块显示 RAM 使用情况。浅绿色区域是“缓存”:

缓存接近最大值

这是我的内存和交换历史记录,其中似乎不包含有关“缓存”的任何信息。我​​意识到此时我还不完全清楚“缓存”和“交换”之间的区别:

内存和交换

答案1

大概需要减少你的交换量。

内核认为最好将空闲的 RAM 用作缓存,而不是驱逐缓存页面并将 RAM 标记为真正空闲。增加缓存通常是一件好事。

现在出现了一个问题:当所有内存都分配给缓存并且您的应用程序需要更多内存时该怎么办。通常正确的做法是从缓存中移出一个页面并将其移交给您的应用程序,但偶尔换出一个很少使用的页面,将其交给您的应用程序并保持缓存完好无损也是有益的。

这个过程由 松散地控制/proc/sys/vm/swappiness。有关更多信息,请查看为什么大多数人建议将 swappiness 降低到 10-20?如何配置 swappiness?

答案2

而我的“缓存”仍然慢慢地达到最大容量,导致我的计算机运行缓慢。

您需要从其他地方寻找导致速度变慢的原因;被称为“缓存”的内存是内核可以在其他需要 RAM 时自由丢弃的内存。它包括最近从磁盘读取的数据等。

虽然已经很老了,但仍然可以合理地描述内存子系统中的一些活动部件。正如它所说,

Linux 有这样的基本规则:空闲的 RAM 页就是浪费的 RAM。

无论你有多少 RAM,你的缓存都会增长到填满它。这不是什么值得担心的事情。远非如此,这是一个非常重要的性能优化——RAM 比快速地SSD,因此任何时候您不必从磁盘读取,这是一个巨大的胜利。

答案3

您的系统使用如此多的缓存,因为它可供使用,并且可以帮助它运行得更快。

缓存一般来说,我们将某个检索速度慢或计算速度慢的事物的副本放在检索速度更快的地方。程序可能会将计算结果存储在内存中,Web 代理可能会将来自 Web 的资源副本存储在 LAN 上的机器上,在这种情况下,系统可能会将硬盘中的数据存储在 RAM 中(以及一些其他数据)。

而且由于它使系统运行得更快,因此使用未被其他程序使用的每一千字节是合乎逻辑的。毕竟,未被其他程序使用的内存块的选项是:

                      |Use For Cache | Don't Use For Cache
——————————————————————+——————————————+————————————————————
Data needed again     |Faster system | No difference
Data not needed again |No difference | No difference

因此,您应该始终将不做任何缓存的每一位内存都用于。

如果系统中有 10% 的 RAM 用于各种用途,而 90% 的 RAM 用于缓存,则不应认为是“已达到最大容量”。应该认为是 10% 已使用,而另外 90% 是空闲的,因此在不需要缓存时将其用于缓存。

但是,如果我们考虑交换,这几乎与在 RAM 中缓存磁盘数据相反:缓存使用 RAM 来加速 I/O(以及可能的其他东西),而分页使用磁盘空间来扩展 RAM。

因此,当系统的所有 RAM 都已使用且需要更多 RAM 时,它有两个选择:

  1. 丢弃一些缓存,因为这毕竟只是一种优化。
  2. 将一些 RAM 调出用于其他用途。

对于哪种方法最好,没有统一的答案。完美的答案取决于许多无法预测的因素,甚至最好的答案也取决于许多取决于您的系统设置和使用方式的因素。

请注意,这些相反的操作确实同时有意义:一个是优先考虑您可能需要的难以获取的信息,另一个是降低您很快不需要的信息的优先级。

250MB 并不是很多,所以我不会太担心,但对于用于交互(而非服务器)的高 RAM 桌面系统,我可能尝试减少交换量,以改变此处的平衡行为。这个答案很好地解释了为什么它可能不会产生太大的差别,但尝试一下看看它是否可行是合理的。

您首先要处理一个更大的问题,即有人sudo sh -c "sync; echo 3 > /proc/sys/vm/drop_caches"不时在您的机器上运行程序,这会清除未使用的 RAM 中快速访问的数据,并迫使系统重新计算或重新检索它应该能够从内存中获取的内容。这会使系统变慢,并且 RAM 会浪费金钱。

相关内容