经过讨论这里关于PHP-FPM
内存占用,我刚刚发现在命令中读取内存时出现问题。下面是我重启后top
的截图。一切正常:大约 20 个进程,每个进程占用 5.5MB 内存(占总内存的 0.3%)。top
PHP-FPM
PHP-FPM
这是重启前的老服务器PHP-FPM
(上次重启后一天)。这里我们仍然有大约 25 个服务器的PHP-FPM
内存使用量翻倍(10MB,占总量的 0.5%)。因此,总内存使用量应为 600-700 MB。那么,为什么使用了 1.6GB 内存?
答案1
总结 1
您的服务器位于某种 virtuozzo/openvz/ 中当今的虚拟化容器。试图理解内存使用情况是件很困难的事。
总结 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
:Herp Derp。$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
Mem 行显示总 RAM (以兆字节为单位)($n total
在顶部),已使用量($n used
在顶部),空闲量($n free
在顶部),共享量(忽略),现在到了精彩部分!中的buffers
和cached
列与和free -m
相关联,这是可以预见的。但请看一下 的第二行,它以 开头。数学表明已使用量实际上是 (total)-((used-buffers)-cached)。空闲量是 (total)-(theNewUsed)。$n buffers
$n cache
free -m
-/+ buffers/cache:
这一切意味着什么?这意味着Linux 吞噬了你的 RAM!简而言之,Linux 内核会占用 RAM,因为 RAM 可用于磁盘缓存。除非您想尝试编译自定义内核,否则对此无能为力。专家提示:不。
RAM 确实存在,可供进程随意使用。这就是-/+ buffers/cache:
中的行所表示的意思free -m
。但是,您处于非虚拟机管理程序虚拟化容器中,这让事情变得有点棘手。此时您根本无法以字节精度盘点您的内存。但是,您没有看到任何非常不寻常的行为。
保持冷静,继续前行。另外,获取物理服务器(除非你喜欢看起来像 Kreskin 是你的 SysAdmin 的内存统计信息)。
答案2
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
=================================