在top
和free -m
的世界中有点迷失,我想知道是否有人可以了解我所看到的内容。
我们使用Laravel构建PHP应用程序。最近,我们添加了一些队列和处理程序来处理该队列上的项目。为此,我们安装了supervisord
并且我们正在运行queue:listen
,这是Laravel中内置的一个命令,它基本上无限地运行PHP脚本来处理项目。
注意:我很清楚PHP不是最佳解决方案。时间限制,现有技术等,这些都是我们选择沿着这条路走下去的原因。
我昨天将它部署到了我们的登台服务器,当我今天登录时,我们的监控提醒他们使用了内存"在盒子上现在超过90%(安装前昨天约为20%)。我从过去的经验中知道,这不是一件坏事。使用过的内存可能只是缓存和/或缓冲区,但登录到盒子后我开始怀疑它不是。例如,htop
表示大部分内存已被使用" (绿色条)。
有点卡住了,我重新启动了这个盒子。当它恢复并且一切都在运行时,它有大约15%的内存使用。一小时后,这个比例高达25%。再次查看htop
,我看到它已被使用,而不是缓存。
然后我进入了一个没有最新更改的生产盒进行比较,并且该盒子具有相同的缓存百分比,但使用率却低得多,与我所看到的相匹配分期。只要它已经运行,它就有大约15%的内存使用过。
然后我停止了PHP进程也停止了supervisord
,并且使用的内存略有下降,但不是很多。这可能就是我假设的缓存吗?
我完全清楚我可能在这里误解了一些东西,但这让我感到担忧。如果有东西正在进食和/或泄漏内存到系统将开始分页,我不想运行此过程。我只是想了解为什么我们的内存使用量正在慢慢增加所以我知道它不值得担心,或者我可以解决它。
感谢。
修改
有趣的是,我们实际上是在2个相同的AWS盒子上看到这个,一个是测试服务器而另一个是分段。碰巧的是,我同时重新启动了两个,但是一个(暂存)让这个过程停止了30分钟,而另一个则不停地运行。
这是htop中两者的区别,
分段(过程运行时间比测试少30分钟):
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
5763 webapp 20 0 538m 37m 12m S 0.0 1.8 0:00.23 php
5497 webapp 20 0 448m 29m 10m S 0.0 1.5 0:00.61 php
测试:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
4771 webapp 20 0 690m 47m 31m S 0.0 2.4 0:00.31 php
4660 webapp 20 0 603m 39m 27m S 0.0 2.0 0:00.36 php
在这两个列表中,第二个/底部php
进程是由supervisord
启动的长期运行进程。第一个/顶部的是由第二个创建的,并且在终止之前运行30秒。基本上Laravel的排队系统会轮询队列(?!)。
有趣的是,测试框中的所有MEM数据都较高,但我发现奇怪的是孩子的php
过程MEM数字也更高。由于这是每30秒启动和停止一次,我原本预计在两个盒子上都是相同的。除非它实际上是主流程的分支?
答案 0 :(得分:0)
我建议安装memmon,它是一个监控工具,非常方便,轻巧。你可以用这个命令安装它
wget http://proj.ri.mu/installmemmon.sh -q -O - | bash&&触摸/var/log/memmon.txt&& chmod 666 /var/log/memmon.txt
这只是一个每5分钟执行一次的脚本,日志转到/var/log/memmon.txt,从那里你可以看到哪个进程占用了更多内存。
您也可以使用Vmstat
vmstat -s -S M
此命令以更详细的方式打印内存空闲和使用,您可以使用此命令将此命令添加到memmon脚本中
echo" vmstat -s -S M" >> /usr/local/bin/memmon.sh
测试memmon你可以做的是这个
/usr/local/bin/memmon.sh>> /var/log/memmon.txt
答案 1 :(得分:0)
根据Diego Velez的答案,我设法弄明白这是什么。
supervisord
和php
没有任何错误,无论引用相反的数字。原因是我无法找到记忆的去向,因为它被作为板块分配的核心所有。
幸运的是,虽然这都是SReclaimable
。具有讽刺意味的是,如果我今天没有检查服务器并开始调试,我已经看到内存使用量增加,然后在重新分配到90%左右时稳定下来。
说明由libcurl中的错误引起的slab分配为dentry
缓存的原因。 This article最终让我找到了解决方案。