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


27

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

在此处输入图片说明

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

在此处输入图片说明



@ephemient不,这里不是这样。我检查了所有这些东西。这是与PHP-FPM相关联的,只有重新启动PHP-FPM才能释放内存。无论如何,Mem和缓冲区/缓存中的值free是相同的。
Googlebot

6
看起来您正在运行Virtuozzo“ VM”。就内存记帐处理这些事情而言,所有赌注都没有。
womble


亲爱的womble和ephemient:我偷走了你的所有答案!咯咯声
韦斯利

Answers:


34

TL; DR 1

您的服务器位于virtuozzo / openvz / virtualization-du-jour容器中。试图弄清内存的使用情况正在风车中倾斜。

TL; DR 2

Linux吃了你的RAM!但这没关系,它对所有人都适用。


长篇小说

让我们分解一下!

在本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相关。我以自己的PC为例:

             total       used       free     shared    buffers     cached
Mem:          8070       7747        323          0        253       5713
-/+ buffers/cache:       1780       6290
Swap:         5055          0       5055

“内存”行以兆字节($n total顶部)显示总RAM,已使用的空间($n used顶部),可用的空间($n free顶部),共享的空间(忽略),现在就可以了!中的bufferscachedfree -m可预测地$n buffers与和相关$n cache。但是,请看第二行的free -m开头-/+ buffers/cache:。数学表明,使用的量实际上是(总计)-((已使用的缓冲区)-缓存的)。免费是(总计)-(theNewUsed)。

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

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

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


使用量不是((used-buffers)-cached)吗?
mac

1

Top并不是检查内存使用情况的最佳方法。但是,由于我的问题被标记为该问题的重复,因此我将在此处发布解决方案。

我在一个论坛上读到,ps_mem.py将为您检查内存使用情况。

仓库:https : //github.com/pixelb/ps_mem/

下载:

pip install ps_mem

用法:

ps_mem

输出:

# ps_mem
 Private  +   Shared  =  RAM used   Program

  4.0 KiB +  15.5 KiB =  19.5 KiB   udevd
  4.0 KiB +  16.0 KiB =  20.0 KiB   mysqld_safe
  4.0 KiB +  25.5 KiB =  29.5 KiB   dbus-daemon
  4.0 KiB +  27.5 KiB =  31.5 KiB   xinetd
 60.0 KiB +  14.5 KiB =  74.5 KiB   epmd
108.0 KiB +  23.0 KiB = 131.0 KiB   init
  8.0 KiB + 135.0 KiB = 143.0 KiB   saslauthd (2)
180.0 KiB +  34.0 KiB = 214.0 KiB   check_scripts.s
796.0 KiB +  41.0 KiB = 837.0 KiB   bash
528.0 KiB + 359.0 KiB = 887.0 KiB   crond (7)
  1.2 MiB + 218.0 KiB =   1.4 MiB   sshd (2)
  1.6 MiB +  45.0 KiB =   1.6 MiB   rsyslogd
  2.0 MiB + 133.0 KiB =   2.1 MiB   beam.smp
  1.3 MiB +   2.3 MiB =   3.6 MiB   httpd (8)
 12.8 MiB + 956.0 KiB =  13.8 MiB   sendmail.sendmail (7)
 53.5 MiB + 114.0 KiB =  53.7 MiB   mysqld
317.6 MiB +   2.3 MiB = 320.0 MiB   python (6)
---------------------------------
                        398.5 MiB
=================================
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.