2018-09-26 10:16:42 +08:00
|
|
|
|
使用 top 命令了解 Fedora 的内存使用情况
|
2018-09-25 12:48:10 +08:00
|
|
|
|
======
|
|
|
|
|
|
|
|
|
|
![](https://fedoramagazine.org/wp-content/uploads/2018/09/memory-top-816x345.jpg)
|
|
|
|
|
|
2018-09-26 10:16:42 +08:00
|
|
|
|
如果你使用过 `top` 命令来查看 Fedora 系统中的内存使用情况,你可能会惊讶,看起来消耗的数量比系统可用的内存更多。下面会详细介绍内存使用情况以及如何理解这些数据。
|
2018-09-25 12:48:10 +08:00
|
|
|
|
|
|
|
|
|
### 内存实际使用情况
|
|
|
|
|
|
2018-09-26 10:16:42 +08:00
|
|
|
|
操作系统对内存的使用方式并不是太通俗易懂。事实上,其背后有很多不为人知的巧妙技术在发挥着作用。通过这些方式,可以在无需用户干预的情况下,让操作系统更有效地使用内存。
|
2018-09-25 12:48:10 +08:00
|
|
|
|
|
|
|
|
|
大多数应用程序都不是系统自带的,但每个应用程序都依赖于安装在系统中的库中的一些函数集。在 Fedora 中,RPM 包管理系统能够确保在安装应用程序时也会安装所依赖的库。
|
|
|
|
|
|
2018-09-26 10:16:42 +08:00
|
|
|
|
当应用程序运行时,操作系统并不需要将它要用到的所有信息都加载到物理内存中。而是会为存放代码的存储空间构建一个映射,称为虚拟内存。操作系统只把需要的部分加载到内存中,当某一个部分不再需要后,这一部分内存就会被释放掉。
|
2018-09-25 12:48:10 +08:00
|
|
|
|
|
|
|
|
|
这意味着应用程序可以映射大量的虚拟内存,而使用较少的系统物理内存。特殊情况下,映射的虚拟内存甚至可以比系统实际可用的物理内存更多!而且在操作系统中这种情况也并不少见。
|
|
|
|
|
|
|
|
|
|
另外,不同的应用程序可能会对同一个库都有依赖。Fedora 中的 Linux 内核通常会在各个应用程序之间共享内存,而不需要为不同应用分别加载同一个库的多个副本。类似地,对于同一个应用程序的不同实例也是采用这种方式共享内存。
|
|
|
|
|
|
|
|
|
|
如果不首先了解这些细节,`top` 命令显示的数据可能会让人摸不着头脑。下面就举例说明如何正确查看内存使用量。
|
|
|
|
|
|
|
|
|
|
### 使用 `top` 命令查看内存使用量
|
|
|
|
|
|
2018-09-26 10:16:42 +08:00
|
|
|
|
如果你还没有使用过 `top` 命令,可以打开终端直接执行查看。使用 `Shift + M` 可以按照内存使用量来进行排序。下图是在 Fedora Workstation 中执行的结果,在你的机器上显示的结果可能会略有不同:
|
2018-09-25 12:48:10 +08:00
|
|
|
|
|
|
|
|
|
![](https://fedoramagazine.org/wp-content/uploads/2018/09/Screenshot-from-2018-09-17-14-23-17.png)
|
|
|
|
|
|
2018-09-26 10:16:42 +08:00
|
|
|
|
主要通过以下三列来查看内存使用情况:`VIRT`、`RES` 和 `SHR`。目前以 KB 为单位显示相关数值。
|
2018-09-25 12:48:10 +08:00
|
|
|
|
|
2018-09-26 10:16:42 +08:00
|
|
|
|
`VIRT` 列代表该进程映射的<ruby>虚拟<rt>virtual</rt></ruby>内存。如上所述,虚拟内存不是实际消耗的物理内存。例如, GNOME Shell 进程 `gnome-shell` 实际上没有消耗超过 3.1 GB 的物理内存,但它对很多更低或更高级的库都有依赖,系统必须对每个库都进行映射,以确保在有需要时可以加载这些库。
|
2018-09-25 12:48:10 +08:00
|
|
|
|
|
2018-09-26 10:16:42 +08:00
|
|
|
|
`RES` 列代表应用程序消耗了多少实际(<ruby>驻留<rt>resident</rt></ruby>)内存。对于 GNOME Shell 大约是 180788 KB。例子中的系统拥有大约 7704 MB 的物理内存,因此内存使用率显示为 2.3%。
|
2018-09-25 12:48:10 +08:00
|
|
|
|
|
2018-09-26 10:16:42 +08:00
|
|
|
|
但根据 `SHR` 列显示,其中至少有 88212 KB 是<ruby>共享<rt>shared</rt></ruby>内存,这部分内存可能是其它应用程序也在使用的库函数。这意味着 GNOME Shell 本身大约有 92 MB 内存不与其他进程共享。需要注意的是,上述例子中的其它程序也共享了很多内存。在某些应用程序中,共享内存在内存使用量中会占很大的比例。
|
2018-09-25 12:48:10 +08:00
|
|
|
|
|
2018-09-26 10:16:42 +08:00
|
|
|
|
值得一提的是,有时进程之间通过内存通信,这些内存也是共享的,但 `top` 这样的工具却不一定能检测到,所以以上的说明也不一定准确。
|
2018-09-25 12:48:10 +08:00
|
|
|
|
|
|
|
|
|
### 关于交换分区
|
|
|
|
|
|
|
|
|
|
系统还可以通过交换分区来存储数据(例如硬盘),但读写的速度相对较慢。当物理内存渐渐用满,操作系统就会查找内存中暂时不会使用的部分,将其写出到交换区域等待需要的时候使用。
|
|
|
|
|
|
2018-09-26 10:16:42 +08:00
|
|
|
|
因此,如果交换内存的使用量一直偏高,表明系统的物理内存已经供不应求了。有时候一个不正常的应用也有可能导致出现这种情况,但如果这种现象经常出现,就需要考虑提升物理内存或者限制某些程序的运行了。
|
2018-09-25 12:48:10 +08:00
|
|
|
|
|
|
|
|
|
感谢 [Stig Nygaard][1] 在 [Flickr][2] 上提供的图片(CC BY 2.0)。
|
|
|
|
|
|
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
via: https://fedoramagazine.org/understand-fedora-memory-usage-top/
|
|
|
|
|
|
|
|
|
|
作者:[Paul W. Frields][a]
|
|
|
|
|
选题:[lujun9972](https://github.com/lujun9972)
|
|
|
|
|
译者:[HankChow](https://github.com/HankChow)
|
2018-09-26 10:16:42 +08:00
|
|
|
|
校对:[wxy](https://github.com/wxy)
|
2018-09-25 12:48:10 +08:00
|
|
|
|
|
|
|
|
|
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
|
|
|
|
|
|
|
|
|
[a]: https://fedoramagazine.org/author/pfrields/
|
|
|
|
|
[1]: https://www.flickr.com/photos/stignygaard/
|
|
|
|
|
[2]: https://www.flickr.com/photos/stignygaard/3138001676/
|
|
|
|
|
|