在这里讨论了关于PHP-FPM
如何消耗内存的问题之后,我发现在top
命令中读取内存时出现问题。 这是刚刚重新启动PHP-FPM
后,我的top
屏幕截图。 一切正常:大约20个PHP-FPM
进程,每个进程消耗5.5MB内存(占总数的0.3%)。
这是PHP-FPM
重启之前的老化服务器(上一次重启后的一天)。 在这里,我们仍然有大约25 PHP-FPM
双内存使用的PHP-FPM
(10MB,占总数的0.5%)。 因此,使用的总内存应该是600-700 MB。 那么,为什么使用1.6GB的内存呢?
您的服务器位于某种virtuozzo / openvz / virtualization-du-jour容器内。 试图理解内存使用情况正在风车上倾斜。
Linux吃了你的RAM! 但是没关系,这对每个人都是这样。
让我们来分解一下!
在Mem:
部分我们有:
$n total
:机器中物理RAM的数量 $n used
了$n used
:Linux消耗了多less内存,而不仅仅是进程的总和。 $n free
:Linux没有占用多less内存。 这并没有考虑到caching和缓冲内存本质上是“免费的”。 $n buffers
:缓冲区空间是已经被读取或等待写入的磁盘I / O的块被存储的地方。 缓冲区是单个磁盘块的RAM表示。 在Swap:
部分我们有:
$n total
:自我解释。 可用于交换页面的磁盘空间量。 $n used
:自我解释。 多less磁盘交换空间被使用。 $n free
:Herp Derp。 $n cache
:与上面的缓冲区密切相关。 它实际上是页面caching的一部分,本身在物理磁盘上没有空间。 不要担心这个对话的细节。 有趣的部分来自free -m
。 你会看到三行,所有的数字将与顶部相关。 我将以自己的个人电脑为例:
total used free shared buffers cached Mem: 8070 7747 323 0 253 5713 -/+ buffers/cache: 1780 6290 Swap: 5055 0 5055
Mem行以MB $n total
显示了总RAM( $n total
在顶部),使用了多less( $n used
在顶部使用),多less空闲( $n free
在顶部),共享多less(忽略)现在是最好的部分! free -m
的buffers
和cached
列与可预测的$n buffers
和$n cache
。 但是看看free -m
的第二行,它以-/+ buffers/cache:
开头。 math表明使用的数量实际上是(总计) – ((used-buffers)-cached)。 免费(总计) – (新使用)。
这是什么意思? 这意味着Linux吃了你的RAM! 简而言之,Linux内核吞噬了RAM,因为它可用于磁盘caching。 除非你想编译一个定制的内核,否则你无能为力。 专业提示:不要。
内存真的在那里,可以随意使用。 这就是free -m
的-/+ buffers/cache:
行的含义。 但是,你在非Hyper-visor虚拟化容器内部,这使得事情有点松动。 在这一点上,你无法用字节的精度来评估你的内存。 但是,你没有看到任何exception的行为。
保持冷静并进行。 另外,得到一个物理服务器(除非你喜欢内存统计,看起来像Kreskin是你的系统pipe理员)。
顶部不是检查内存使用情况的最佳方法。 然而,由于我的问题被标记为这个问题的重复,我将在这里发布我的决议。
我在论坛上看到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 =================================