CentOS7 php-fpm内存占用问题排查

1.问题排查

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

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

开始排除问题。

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

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

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

2.着手解决

找到 /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

问题解决。

原文地址:https://www.cnblogs.com/byuc/p/11149701.html