没有所谓的捷径
一切都是时间最平凡的累积

php-fpm占用cpu和内存过高100% 的原因和解决办法

本文最后更新:2020年12月11日,已超过1441天未更新,如果文章内容失效,请留言反馈本站。

今天一位朋友它的服务器php-fpm突然占用cpu和内存过高,它的服务器配置是4核8G内存。可以说还是相当不错的,由于php-fpm占用cpu过高从而导致经常出现“502 Bad gateway”。

由于服务器环境是:LNMP一键安装包,我用了“雅黑探针”来查看服务器的性能情况,结果如下:

php-fpm占用cpu和内存过高100% 的原因和解决办法

php-fpm占用cpu和内存过高100% 的原因和解决办法

如有不明白,请查看:

top命令查看CPU状态信息:%us、%sy、%ni、%id、%wa、%hi、%si、%st 表示的是什么意思?

php-fpm占用cpu和内存过高100% 的原因和解决办法

解决办法如下:

多查看日志,根据日志来做解决,最后就是再查看配置文件,是否需要配置调优?

由于有一些步骤不太好表达出来,大家请简单的看一下逻辑吧,需要你懂很多方面的东西才能够明白它。此文中有链接的地方请大家一定要看一下,否则你是不能够明白的。

下面讲讲我是如何帮我朋友解决“php-fpm占用cpu和内存过高100%”这个问题的?

一、查看它的php-fpm.conf配置文件:

php-fpm占用cpu和内存过高100% 的原因和解决办法

从上面配置文件可以看出,它采用的是动态,默认的启动进程数是4个,最大的是6个,最小的是4个。

如有不明白请查看:

pm.max_children 设置多大合适?

php-fpm.conf 配置 性能优化 和相关参数详解

二、查看linux平均负载:

php-fpm占用cpu和内存过高100% 的原因和解决办法

从上面可以看出,6个php-fpm进程占用的cpu空间都很高,平均负载(load average)情况如下:

1分钟平均负载:2.32;

5分钟平均负载:2.18;

15分钟平均负载:3.95;

可以说它现在的平均负载接近了它的cpu总核数:4;需要考虑服务器配置升级!

如有不明白请查看:

Linux 平均负载 Load Average 详解

184 total :184个总进程数

4 running:4个正在运行的进程数

143 sleeping:180个睡眠的进程数

0 stoppe:0个停止的进程数

0 zombie:0个冻结进程数

三、更改 php-fpm.conf 配置文件 来做调优

由于服务器是8G内存,按理说应该可以启动200个左右的php-fpm进程对吗?于是我修改如下:

php-fpm占用cpu和内存过高100% 的原因和解决办法

除了以上配置测试了之外,我还把“pm = dynamic”修改成了“pm= static”配置来做测试,结果都不理想,具体结果向下看:

四、再一次查看linux平均负载:

php-fpm占用cpu和内存过高100% 的原因和解决办法

从上面配置可以看出来,每一个php-fpm虽然占用的cpu空间少了,但是总量依然还是接近100%。

而且平均负载(load average)情况如下:

1分钟平均负载:289.73;

5分钟平均负载:264.27;

15分钟平均负载:179.20;

可以说它现在的平均负载接远远超过了总cpu核数:4;必须升级服务器配置。

之所以这么高,除了它本身服务器配置跟不上之外,还有一个就是我把pm.max_spare_servers设置成了512,如果一个线程占用20M内存,则需要512*20;而它现在的服务器只有8G内存4核CPU;因此这个负载才能达到了200多。这里也算是测试的一个小失误吧!

正常情况下,一个线程占用内存20~30M,8G内存设置100~200就足够了。

184 total :678个总进程数

4 running:211个正在运行的进程数

143 sleeping:327个睡眠的进程数

0 stoppe:140个停止的进程数

0 zombie:0个冻结进程数

总结:

因为我的失误测试,我再重新把配置文件修改成:“pm= static”和 "pm.max_children =100",依然cpu和内存还是占用很高,负载非常的高,这完全是没有道理的。

试想一下:一个4核8G内存的服务器,居然线程设置越大,CPU占用越高(设置在内存最大允许范围),设置越小CPu占用越小,这是不正常的。最主要的是,php-fpm线程虽然小,占用cpu空间少了,但是出现502的次数就多了。从而更加说明了目前的服务器目前的配置支撑不了现有的业务。

现在我朋友向总部申请了8核16G内存的服务器,申请成功后,默认开始启动设置的线程是100,最大线程是200;现在已经恢复正常。

可以查看我另外一篇文章:php-fpm.conf 参数详解,配置性能优化

» 站长码字辛苦,有用点个赞吧,也可以打个
» 若转载请保留本文转自:豫章小站 » 《php-fpm占用cpu和内存过高100% 的原因和解决办法》
» 本文链接地址:https://blog.mydns.vip/3529.html
» 如果喜欢可以: 点此订阅本站 有需要帮助,可以联系小站
赞(1) 打赏
声明:本站发布的内容(图片、视频和文字)以原创、转载和分享网络内容为主,若涉及侵权请及时告知,将会在第一时间删除,联系邮箱:contact@mydns.vip。文章观点不代表本站立场。本站原创内容未经允许不得转载,或转载时需注明出处:豫章小站 » php-fpm占用cpu和内存过高100% 的原因和解决办法
分享到: 更多 (0)

评论 2


  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
  1. #1

    我的站目前每天120个IP,其中刷的是100个。
    不知道为什么升级到4H8G5M的标准服务器还是偶尔会崩,CPU占满,但是内存一般这种时候只占50%左右,这是为什么呢?max_children我也设置到了120,感觉也没啥变化。而且为什么内存不占满的情况下CPU先崩了呢

    小龙2周前 (11-06) 16:08回复
    • 负载高和内存并不一定有关系,这可能是程序执行的问题,比如数据库查询量很大,磁盘被拖累,这个就要让服务商协助具体分析排查下了

      小站站长1周前 (11-11) 17:12回复

智慧源于勤奋,伟大出自平凡

没有所谓的捷径,一切都是时间最平凡的累积,今天所做的努力都是在为明天积蓄力量

联系我们赞助我们

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏