如何解释 Linux 'top' 命令的输出?

Goo*_*bot 28 linux memory shell top

根据此处关于如何PHP-FPM消耗内存的讨论,我刚刚发现在top命令中读取内存时出现问题。这是我top刚刚重新启动后的屏幕截图PHP-FPM。一切正常:大约 20 个PHP-FPM进程,每个进程消耗 5.5MB 内存(占总数的 0.3%)。

在此处输入图片说明

这是重新启动之前的旧服务器PHP-FPM(上次重新启动后一天)。在这里,我们仍然有大约 25PHP-FPM个内存使用量翻倍(10MB 表示占总数的 0.5%)。因此,使用的总内存应为 600-700 MB。那么,为什么要使用 1.6GB 的内存呢?

在此处输入图片说明

Wes*_*ley 36

TL;博士 1

您的服务器位于某种 virtuozzo/openvz/ virtualization-du-jour容器中。试图理解内存使用情况就像风车一样。

TL;博士 2

Linux 吃了你的内存!但这没关系,它对每个人都有效。


长篇大论

让我们分解它!

在本Mem:节中,我们有:

  • $n total:您机器中的物理 RAM 量
  • $n used:Linux 消耗了多少内存,而不仅仅是进程的总和。
  • $n free:Linux 没有消耗多少 RAM。这并没有考虑到缓存和缓冲的内存本质上是“空闲的”。
  • $n buffers:缓冲区空间是存储已读取或等待写入的磁盘 I/O 块的地方。缓冲区是单个磁盘块的 RAM 表示。

在本Swap:节中,我们有:

  • $n total: 不言自明。可用于交换页面的磁盘空间量。
  • $n used: 不言自明。使用了多少磁盘交换空间。
  • $n free: 赫普德普。
  • $n cache: 与上面的缓冲区密切相关。它实际上是页面缓存的一部分,它本身在物理磁盘上没有空间。不要担心这次谈话的细节。

当您运行free -m. 您将看到三行,并且所有数字都与 top 相关。我以我自己的电脑为例:

             total       used       free     shared    buffers     cached
Mem:          8070       7747        323          0        253       5713
-/+ buffers/cache:       1780       6290
Swap:         5055          0       5055
Run Code Online (Sandbox Code Playgroud)

Mem 行显示总 RAM(以兆字节为单位)($n total顶部)、已使用量($n used顶部)、空闲量($n free顶部)、共享量(忽略),现在是好的部分!在bufferscachedfree -m关联到,可以预见,$n buffers$n cache。但是看看以free -m开头的第二行-/+ buffers/cache:。数学表明,使用量实际上是(总计)-((已用缓冲区)-缓存)。免费是(总计)-(新使用的)。

这是什么意思呢?这意味着Linux 吃了你的 RAM!简而言之,Linux 内核会吞噬 RAM,因为它可用于磁盘缓存。除非您想尝试编译自定义内核,否则您无能为力。专业提示:不要。

RAM 确实存在并且可供进程随意使用。这就是 中的-/+ buffers/cache:行的含义free -m。但是,您处于非管理程序虚拟化容器中,这让事情变得有些松散。在这一点上,您根本无法以字节精度来评估您的内存。但是,您没有看到任何异常异常的行为。

保持冷静并进行。另外,获得一台物理服务器(除非您喜欢看起来像 Kreskin 是您的系统管理员的内存统计数据)。