理解 Fedora 内存使用与顶部

您是否使用过终端中的 top 实用程序来查看您的内存使用情况? Fedora 系统? 如果是这样,您可能会惊讶地看到其中的一些数字。 看起来消耗的内存可能比系统可用的多得多。 本文将解释更多关于内存使用的信息,以及如何读取这些数字。

实际内存使用情况

操作系统 (OS) 使用内存的方式可能不言自明。 事实上,一些巧妙的幕后技巧正在发挥作用。 它们可以帮助您的操作系统更有效地使用内存,而无需您参与。

大多数应用程序不是自包含的。 相反,每个都依赖于库中收集的函数集。 这些库也安装在系统上。 在 Fedora,RPM 打包系统确保当您安装应用程序时,它所依赖的所有库也都安装了。

当应用程序运行时,操作系统不一定会将其使用的所有信息加载到实际内存中。 相反,它会构建一个映射到存储该代码的存储,称为虚拟内存。 然后操作系统只加载它需要的部分。 当它不再需要部分内存时,它可能会酌情释放或交换它们。

这意味着应用程序可以映射大量虚拟内存,同时在系统上一次使用更少的实际内存。 它甚至可能映射比系统可用的更多 RAM! 事实上,在整个操作系统中,情况往往如此。

此外,相关应用程序可能依赖于相同的库。 你的 Linux 内核 Fedora 系统经常在应用程序之间共享内存。 它不需要为相关应用加载同一个库的多个副本。 这同样适用于同一应用程序的不同实例。

如果不了解这些细节,顶级应用程序的输出可能会令人困惑。 以下 example 将把这个观点澄清到内存使用中。

在顶部查看内存使用情况

如果您还没有尝试过,请打开终端并运行 top 命令以查看一些输出。 打 Shift+M 查看按内存使用情况排序的列表。 您的显示可能与此略有不同 example 从跑步 Fedora 工作站:

有三列显示要检查的内存使用情况:VIRT、RES 和 SHR。 测量值当前以千字节 (KB) 显示。

VIRT 列是为此进程映射的虚拟内存。 回想一下前面的描述,虚拟内存并不是实际消耗的 RAM。 为了 example,GNOME Shell 进程 gnome-shell 实际上并没有消耗超过 3.1 GB 的实际 RAM。 但是,它建立在许多较低和较高级别的库之上。 系统必须映射其中的每一个,以确保在必要时可以加载它们。

RES 列显示应用程序消耗了多少实际(常驻)内存。 对于 GNOME Shell,大约为 180788 KB。 这 example 系统有大约 7704 MB 的物理内存,这就是内存使用率显示为 2.3% 的原因。

但是,在这个数字中,至少有 88212 KB 是共享内存,如 SHR 列中所示。 这种记忆可能是 example, 其他应用程序也使用的库函数。 这意味着 GNOME Shell 自己使用了大约 92 MB,不与其他进程共享。 请注意,其他应用程序在 example 共享更高百分比的常驻内存。 在某些应用程序中,共享部分占内存使用量的绝大部分。

这里有一个问题,即有时进程通过内存相互通信。 该内存也是共享的,但不一定能被 top 之类的实用程序检测到。 所以是的——即使是上面的澄清仍然有一些不确定性!

关于交换的说明

您的系统有另一个用于存储信息的工具,即交换。 通常这是一个存储速度较慢的区域(如硬盘)。 如果系统上的物理内存随着需求的增加而填满,则操作系统会查找一段时间内不需要的内存部分。 它将它们写到交换区域,它们会坐在那里直到以后需要。

因此,长时间的高交换使用率通常意味着系统的内存太少,无法满足其需求。 有时,错误的应用程序可能有问题。 或者,如果您在系统上经常看到这种情况,请考虑升级您机器的内存,或限制您运行的内容。

照片由 斯蒂格尼高, 通过 弗里克 (抄送 2.0)。