为什么我内存中的缓存总是满的?

Tob*_*ias 13 memory cache ram

我有 6GB RAM,运行 Ubuntu 11.10 的 i5 2.4GHZ 处理器。我对我的 HD 进行了分区,以便我有 8GB 的​​交换空间。

当在线流式传输或在 Chromium 中打开多个选项卡时,我的缓存中很快就会有 4GB 内存。我认为这会使我的笔记本变慢。流式传输视频时,几分钟后它真的会变慢并绊倒/抽搐。

可能是什么问题?我该如何解决这个问题?

PS:最初我有 4GB,最近升级到 6GB,但我没有遇到重大变化。

PPS:free -g在终端打印:

               total       used       free     shared    buffers     cached
Mem:             5          2          3          0          0          0
-/+ buffers/cache:          1          4
Swap:            8          0          8
Run Code Online (Sandbox Code Playgroud)

ams*_*ams 13

缓存数据是 RAM应该使事情更快,而不是更慢 - 当您有未使用的内存时从磁盘重复获取内容只是愚蠢的。但是,如果您溢出到交换空间,则会影响性能。您可以通过运行System Monitor. 如果问题开始时交换空间图没有上升,则问题与内存无关。

当然,当你流式传输视频时,它会被缓存在内存中,但它需要相当多的视频来填充 6Gb!我预计下载这么多数据不仅需要几分钟的时间,而且导致问题的时间也更长!

你确定不是别的问题吗?说,也许冷却?与冷却系统相比,许多笔记本电脑的处理器规格过高。这很好 - 它提供了高峰值性能,适用于突发流量,同时保持流量下降 - 但在被迫回拨时钟速率或融化之前,它无法长时间保持性能。视频可能会占用相当多的处理器,所以您永远不知道?

无论如何,您应该能够从内存使用情况中看到它是否正在交换。如果是,那就是软件问题,可以修复。:)


Car*_*rlo 12

我有同样的问题,似乎缓存从未被释放......一个例子是当我检出一个存储库并最终得到 4GB 的缓存时

例子:

$ free -m
             total       used       free     shared    buffers     cached
Mem:          7949       7425        523          0        112       4433
-/+ buffers/cache:       2879       5069
Swap:         7627          2       7625
Run Code Online (Sandbox Code Playgroud)

我所做的是运行下面的代码(注释只是为了让您知道发生了什么),您可以创建一个脚本,以便您可以在需要时运行它:

# To free pagecache:
#         echo 1 > /proc/sys/vm/drop_caches
# To free dentries and inodes:
#         echo 2 > /proc/sys/vm/drop_caches
# To free pagecache, dentries and inodes:
#         echo 3 > /proc/sys/vm/drop_caches
sudo sync && sudo sysctl -w vm.drop_caches=3
Run Code Online (Sandbox Code Playgroud)

在我运行上面的代码之后:

$ free -m
             total       used       free     shared    buffers     cached
Mem:          7949       2820       5129          0          2        407
-/+ buffers/cache:       2409       5539
Swap:         7627          2       7625
Run Code Online (Sandbox Code Playgroud)

  • 这不是问题,这就是页面缓存的工作方式。它会尽可能长时间地保持缓存,但当来自其他应用程序的内存压力增加时会自动释放项目。手动清除它是不必要的。 (5认同)
  • 可能是这样,但在那种情况下,算法并不是那么好。为什么我会有超过 4GB 的缓存并开始使用交换? (5认同)

Ada*_*zyk 0

我的建议是运行任何进程资源管理器(例如系统监视器)并检查消耗如此多内存的进程。将其发布在这里,我们会看看您是否可以将其关闭。

附:好的,我现在明白了。我敢打赌,由于它使用内存的方式,它的“插件容器”会随着时间的推移而增长。我猜这是因为它是来自吉尔·贝茨系统的端口;)。杀死它不会有帮助(杀死它会让每个页面上的所有动画崩溃,主要是广告,还有 Youtube 视频)。此外,Chromium 本身喜欢随着时间的推移而膨胀,因此处理它的唯一方法可能是不时重新启动它。看看有没有帮助...