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

Modified on: Sun, 21 Jul 2019 06:20:02 +0800

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

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

最佳答案

TL; DR 1

您的服务器位于某种virtuozzo / openvz / virtualization-du-jour 容器中。试图理解记忆的使用是在风车上倾斜。

TL; DR 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:Herp Derp。
  • $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

Mem行显示以兆字节为单位的总RAM(顶部为$n total),使用了多少($n used in top),多少是免费的(共享$n free,共享多少(忽略),现在是好的部分! buffers中的cachedfree -m列与$n buffers$n cache。但是看一下以free -m开头的-/+ buffers/cache:的第二行。数学表明使用量实际上是(总) - ((used-buffers)-cached)。免费是(总) - (新推出)。

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

RAM确实存在并可随意使用流程。这就是-/+ buffers/cache:free -m行的含义。但是,你在非超级遮阳虚拟化容器中,这使得事情有点松懈。此时您无法用字节精度来记录内存。但是,你没有看到任何非常不寻常的行为。

保持冷静并继续。另外,获取物理服务器(除非您喜欢看起来像Kreskin的内存统计信息是您的SysAdmin)。


相关问答

添加新评论