Centos7 php内存占用问题排查

前些日子阿里云服务器一直报内存占用过高的问题,后来就没了声息。我工作也比较忙,随便看了看业务还在正常运行,就没深入了解。后来服务器也不报警,就没管了。

后来续费上去看了看了,好家伙怪不得没报警了。原来云监控插件都挂掉了。估计是因为内存占用过高,系统自动kill掉了云监控。在主机里面重新启动了云监控,内存直接就100%。

问题

排查问题

SSH登陆服务器,用free -m 再确认一下主机内存。

内存情况

1核2G内存的机子,内存直接就满了。这台机器上面部署着Nginx+PHP+Mysql服务,外加一个Dokcer,但是Docker并没有运行。正常来说内存是绰绰有余的。只能使用top而后Shift+M按内存使用进行排序,再进一步排查。

发现是php-fpm开了太多线程了,直接挤爆了内存所致。

系统进程

着手解决

找到 /etc/php-fpm.d/www.confpm.max_children默认是50,每一个进程占用1%-2.5%的内存,加起来就耗费大半内存了。所以我们根据需要修改为30。

pm.max_spare_servers : 该值表示保证空闲进程数最大值,如果空闲进程大于此值,此进行清理 pm.min_spare_servers : 保证空闲进程数最小值,如果空闲进程小于此值,则创建新的子进程;

这两个值均不能不能大于 pm.max_children 值,通常设置 pm.max_spare_servers 值为 pm.max_children 值的60%-80%。

最后,重启php-fpm

systemctl restart php-fpm

问题解决

问题解决。

其他一些话

这篇文章是我一年前在博客园写的,转眼博客也迁出阿里云了。而这篇文章我搜索一看,好家伙,CSDN和oschina加上一些杂七杂八的网站一堆转载。有些有加原文链接的,有些没有加。全部都没有做原作者署名。

与其他通用知识不同,上面这些仅仅只是我个人的一次运维排查。我记录一下,都能有那么多采集。盗亦有道呢?

21.09.30

点赞

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注