缓存内存占用所有内存

Lab*_*ain 10 cache memory-usage ram

几个月前我才切换到 Ubuntu。几天前,我发现系统将缓存存储在占用大量空间的内存中,虽然我得到了缓存内存的好处,但现在这让我陷入困境。

ubuntu 缓存

正如您在这张图片中看到的,Ubuntu 占用了我 50% 以上的 RAM。此外,我使用了 11.6 GiB 的 23.3%,这基本上意味着我的系统占用了超过 75-80% 的内存......

现在,我已经搜索了很多次如何清除我的缓存,我发现sync; echo 1 > /proc/sys/vm/drop_caches具有 sudo 权限的命令可以清除它,但是这个命令只在开始时起作用,就像我使用这个命令并看到我的缓存一样大幅减少。但是现在,当我在运行它后看到我的缓存内存时,它保持不变。

谁能帮我解决这个问题?

PS我想如果我尝试升级我的内存,那不会解决这个问题......

mch*_*hid 25

如果系统占用了缓存中的所有空间,那么我将无法使用内存

这不是真的。缓存 RAM 并不能确定正在使用的 RAM。您能够使用 RAM,这就是它被称为缓存的原因——它可以根据需要使用和丢弃。事实上,这与你的假设正好相反。如果消除缓存的 RAM,您将无法使用缓存的内容。

现在,我已经搜索了很多次如何清除缓存,我发现了同步;echo 1 > /proc/sys/vm/drop_caches 具有 sudo 权限的命令可以清除它,但是这个命令只在开始时起作用,就像我使用这个命令并看到我的缓存我的它大大减少一样。但是现在,当我在运行它后看到我的缓存内存时,它保持不变。

如果您关闭了swappiness,您只需要手动清除缓存。不建议禁用 swappiness来提高性能,因为这实际上会降低系统性能。

与 Windows 不同,Ubuntu 不会因为内存管理的差异而在大量 RAM 负载下崩溃。禁用这些功能会显着降低性能。

总而言之,缓存 RAM 不是正在使用的 RAM,并且不会最大化您的 RAM 或降低系统性能,因为缓存 RAM 会根据需要自动丢弃。相反,缓存 RAM 会在需要时使用它来提高性能。

  • 说 Ubuntu 不会因 RAM 过载而崩溃是不公平的。OOM 杀死您的 X 服务器对桌面体验来说与锁定或内核恐慌一样糟糕。确实,现在这种情况很少见,因为现代发行版对重要进程进行了 OOM 分数调整,但我在大约 5 年前确实经常遇到这种情况。 (2认同)

小智 20

缓存内存实际上是空闲内存。

一旦其他空闲内存用完,它就可以(并且将)作为免费提供给任何需要内存的进程。

同时,内核会跟踪缓存在这块空闲内存中的信息。

预计该信息不会被耗时的 i/o 写入某处。它要么已经写好,要么已经读过,而且从来没有改变过。可以安全(且快速)地从内存中删除此信息。


Har*_*ica 15

缓存不会以任何方式伤害您!

RAM没有被使用的缓存...它是被由高速缓存!这意味着它将在您需要时立即返回供您使用。

如果您的软件请求一块内存,系统就会“给你”并给出内存块。如果恰好有缓存放在那里,则缓存元素将被删除(即它们不再在缓存中,如果需要,必须再次从磁盘中获取)。

更智能的系统将明智地选择从缓存中删除哪些元素来为您提供内存。

  • @LabhamJain 听起来好像你用完了所有的 RAM _and_ 交换。磁盘缓存不是你的问题。 (5认同)
  • @LabhamJain 缓存问题不会挂起你的系统,所以我认为“缓存”是一个红鲱鱼,你有一个完全不同的问题......这里一直发生这种情况,它被称为“XY 问题”...... (3认同)

raj*_*raj 10

打开您的终端 (Ctrl+Alt+T),然后输入命令:free -h. 你会得到这样的输出:

              total        used        free      shared  buff/cache   available
Mem:           15Gi       2.0Gi        10Gi        33Mi       2.7Gi        13Gi
Swap:          31Gi          0B        31Gi
Run Code Online (Sandbox Code Playgroud)

这里你有 15G 的总内存,2G 被使用,2,7G 是缓存,10G 显示为“免费”。但是看看最后一列:它显示 13G 为“可用”。这意味着您可以使用13G 的 RAM(即空闲+缓存的总和),尽管只有 10G 显示为“空闲”。正如其他答案所指出的,缓存内存是临时的:如果需要,它会被分配给应用程序,就像“空闲”内存一样;在这方面,这两者之间没有区别。

这样看:系统使用你电脑上的部分空闲内存来临时缓存从磁盘读取的数据,以加快磁盘操作。但是不管用作缓存,这块内存仍然可以被应用程序自由使用,也就是说,如果应用程序需要它,它将分配给应用程序(使缓存失效)。


Lab*_*ain 2

好吧,我已经弄清楚了该sync; echo 1 > /proc/sys/vm/drop_caches命令的问题,我在某处拼错了该命令,现在如果我正确使用该命令,它会清理我的缓存内存,因此我的问题似乎得到了解决,尽管有更多答案供将来参考和使用社区将受到赞赏。