内存使用率无 100%

内存使用率无 100%

我有 4 GiB RAM,系统监视器显示 3.8 GiB。我认为 200 MiB 是用于 GPU 的。但我从未见过内存使用量超过 3.0 GiB。如果内存使用量接近 3 GiB,它会使用 Swap,当它达到 3 GiB 时,计算机会冻结(我使用的是 Idea IDE)。

我已禁用 vm.swappiness(使用 swapoff -a)。没有帮助。然后尝试了 swappiness=0、swappiness=1、swappiness=20。

当我添加额外的 4 GiB 时,我看到内存使用量为 5 GiB。现在我只有 4 GiB RAM。

我正在使用 Ubuntu 14.04。为什么系统监视器没有显示 3.7 或 3.8 GiB 内存使用情况?在此处输入图片描述

答案1

如果禁用 swappiness,RAM 会变得更满。如果增加 swappiness,当 RAM 达到一定水平时,RAM 中的数据将被分页到交换分区。RAM 会变满,但这并不总是个问题。如果您真的想做些什么,您可以运行以下命令来清除您的现金:

(警告:如果您已经安装了profile-sync-daemon,请sudo service psd stop在运行以下命令之前关闭firefox并运行该命令!)

echo "3" | sudo tee /proc/sys/vm/drop_caches

这将清除您的现金,尽管大多数时候没有必要,尤其是在启用了 swappiness 的情况下。人们通常在看到 Linux 桌面上的 RAM 使用率很高时会感到震惊,但开发人员坚持认为系统实际上会运行得更快,因为 RAM 中的内容是缓存数据,系统可以轻松快速地检索这些数据。当系统使用率很高时,这些缓存文件会被转移到交换区。


您之所以看不到像以前那么多的 RAM 使用量,是因为 Linux 的设计目标是最有效地利用和充分利用可用的系统资源。因此,如果您有 12GB 的 RAM,您可能会看到 8 甚至 9GB 的 RAM 使用量。很多 RAM 使用量用于缓存,通常不需要运行即时桌面。

对于显示使用 3GB RAM 的系统,运行以下命令,您应该会得到更准确的数字:

free

系统监视器显示我使用了 1.4GB 的 RAM,而实际使用的 RAM(包括缓冲区/缓存)为 2.7GB,几乎是报告数字的两倍。这个数字通常要高得多,因为缓存有时会增长到总量的 50% 以上。此外,系统监视器报告我的总 RAM 为 4.7,而实际数字接近 4.9GB。


为了帮助诊断问题,您可以安装 htop 和 iotop,以便更好地了解遇到问题时发生的情况。安装方法:

sudo apt-get install iotop htop

跑步:

sudo iotop

或者

sudo htop

从我自己的经验来看,使用交换总是可以获得更好的系统性能,并且在禁用交换时会遇到问题(系统冻结)。事实上,这很可能是您的计算机冻结的原因。没有交换,系统在内存变满后就无法继续使用内存。如果使用了大量内存,将交换量调得太低也会导致过度分页和硬盘抖动。此问题有时会表现为使用过多的 kworker 活动iotop

答案2

此工具未将磁盘缓存包括在报告的“空闲”内容中。您的系统正在进行交换,以保持合理大小的磁盘缓存。

请参见我对这个问题的回答了解更多信息。以下是摘录:

每个应用程序都会占用部分内存。Linux 会将其余所有未占用的内存(最后几 MB 除外)用作“缓存”。这包括页面缓存、inode 缓存等。这是一件好事 - 它有助于加快堆的速度。通过缓存,写入磁盘和从磁盘读取的速度都大大加快。

理想情况下,您有足够的内存供所有应用程序使用,并且还有几百 MB 的内存用于缓存。在这种情况下,只要您的应用程序不增加内存使用量,并且系统不会对缓存施加太大压力,就不需要进行任何交换。

一旦应用程序要求更多 RAM,它就会进入缓存使用的部分空间,从而缩小缓存。取消分配缓存既便宜又简单,只需实时完成即可 - 缓存中的所有内容要么只是磁盘上已有内容的第二个副本,因此可以立即取消分配,要么无论如何都必须在接下来的几秒钟内刷新到磁盘,因此重新分配缓存给应用程序不会对性能造成任何影响。

因此,当有人提到“空闲”RAM 时,这可能包括也可能不包括缓存,因为缓存只会占用“空闲”RAM。这不是 Linux 特有的情况 - 所有现代操作系统都以这种方式工作。不同的操作系统可能只是以不同的方式报告空闲 RAM:有些操作系统将缓存作为它们认为的“空闲”的一部分,而有些则可能不包括。

当您谈论可用 RAM 时,包含缓存更有意义,因为它实际上是免费的 - 只要任何应用程序请求它,它就可以使用。在 Linux 上,该free命令以两种方式报告 - 第一行在已用 RAM 列中包含缓存,第二行

...

一旦使用了足够的内存,以致剩余的内存不足以维持平稳运行的缓存,Linux 可能会从 RAM 中重新分配一些未使用的应用程序内存来​​进行交换,以便重新获得一些用于缓存的内存。

不过,它并不是根据一个明确的截止点来执行此操作的。并不是说达到一定的分配百分比后 Linux 就开始交换。它有一个相当“模糊”的算法。它考虑了很多因素,可以用“内存分配压力有多大”来最好地描述。如果分配新内存的“压力”很大,那么就会增加一些内存被交换以腾出更多空间的机会。如果“压力”较小,那么就会减少这些机会。

注意:我上面所说的不仅适用于 Linux,而且适用于几乎所有现代计算机操作系统,包括 Windows、Mac OS 等。

答案3

vm.min_free_kbyte您可以更改或修改参数的值/etc/sysctl.conf

这控制着可供特殊保留(包括“原子”分配(不能等待回收的分配))使用的内存量。

您可以设置一个小的值并观察其运行情况。

您可以在以下位置查看更多信息邮政。

相关内容