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

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

 

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

php-fpm占用cpu和内存过高100%

cpu状态信息

如有不明白,请查看:

CPU状态信息:%us、%sy、%ni、%id、%wa、%hi、%si、%st 各是什么意思

 

内存状态信息

 

解决办法如下:

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

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

 

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

 

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

php-fpm.conf配置文件

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

如有不明白请查看:

pm.max_children 设置多大合适

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

 

二、查看linux平均负载:

linux平均负载

从上面可以看出,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.conf 配置文件

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

 

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

再一次查看linux平均负载

从上面配置可以看出来,每一个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;现在已经恢复正常,如下图:

服务器实时数据

 

从这里也可以说明,有时候出问题并不是你自己的原因,就是服务器硬件配置跟不上的原因。

    A+
发布日期:2017年12月07日 16:33:03  所属分类:PHP
最后更新时间:2017-12-07 17:52:16
评分: (5 票;平均数5.00 ;最高评分 5 ;用户总数5;总得分 25;百分比100.00)
付杰
花牛苹果 甘肃天水 李宏恩家自种 1斤 包邮
花牛苹果 甘肃天水 李宏恩家自种 1斤 包邮
  • ¥ 6.8元
  • 市场价:8.8元
PHP运行环境 wamp lamp lnmp 安装 配置 搭建
PHP运行环境 wamp lamp lnmp 安装 配置 搭建
  • ¥ 9.9元
  • 市场价:49.9元
免费SSL证书 HTTPS申请 安装 配置 支持通配符*
免费SSL证书 HTTPS申请 安装 配置 支持通配符*
  • ¥ 199.9元
  • 市场价:20000元
刷流量 刷人气 刷点击 刷收藏 刷APP关键词
刷流量 刷人气 刷点击 刷收藏 刷APP关键词
  • ¥ 1.0元
  • 市场价:9.9元

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

目前评论:23   其中:访客  15   博主  8

  1. 头像 zhu 2

    嗯,一个g左右;控制面板是宝塔;是不是要想内存占用率不高,只能提升服务器的配置了啊,这真是硬伤哈哈哈哈

    • 付杰 付杰

      @zhu 是的,才占75%,也可以了,毕竟你配置才1G内存,而且东西也开了不少。只要能支撑起网站业务就暂时不用升级,我一个朋友网站内存占到了85%也没什么,并不影响网站。不影响网站的情况下,没必要升级。
      我个人感觉吧,内存占到了90%就可以升级了,Linux下可以用“free -m”查看总内存,占用了多少,还剩下多少。

      • 头像 zhu 2

        @付杰 好的,谢谢耐心解答

  2. 头像 zhu 2

    也开启Swap功能,给它的容量是1300MB左右

    • 付杰 付杰

      @zhu 你给了虚拟内存呗,用磁盘代替内存呗,给了1300M,也就是一个G左右的内存吧!

      • 头像 zhu 2

        @付杰 嗯,一个g左右;控制面板是宝塔

  3. 头像 zhu 2

    为什么我的wordpress搭建完,内存占用率几乎都在75%以上,而cup和负载几乎连20%都没有达到。

    • 付杰 付杰

      @zhu 这种情况首先要看你的服务器配置如何?再看你网站是否做了一些缓存,这个缓存还是以内存为主的。当然,网站流量也要看?有时候,流量太高,服务器配置跟不上。
      具体我也是要知道了详细情况才能判断。

      • 头像 zhu 2

        @付杰 服务器配置是1g内存1核cpu;我开启了memcached和opcache缓存组件,php用的是7.3的版本,数据库用的5.6版本的;第一开始cpu和负载使用率非常高,我开了这些以后,就不高了,也在百度上,查了查如何优化wordpress的性能速度,修改了一些php和mysql的参数。

        • 付杰 付杰

          @zhu 那你内存占75%很正常了,毕竟你配置只有1G内存1核CPU,而且你还用了memcached和opcache,memcached是用内存的,opcache也会用一些内存。而且系统也要占一些内存!不知道你有没有安装控制面板?例如:宝塔之类的。

      • 头像 zhu 2

        @付杰 是不是这是属于硬伤啊,已经没法在优化了,哈哈哈

        • 付杰 付杰

          @zhu 从你说的这些,好像是这样的。

  4. 头像 绿叶 1

    lnmp wordpress 为什么内存占用很高?

    • 付杰 付杰

      @绿叶 你已经加我Q了,我也远程帮你处理了。具体原因如下:你的Lnmp环境下有两个wordpress网站,其中一个正常。但是另一个网站只要开启,CPU瞬间接近100%,关闭这个网站CPU又恢复正常。请看此网站的源码有什么问题?

  5. 头像 小呆 1

    我是宝塔面板 php cgi占内存特高!

  6. 头像 我不要不要 3

    php-fpm 占用内存过高 有大量 /dev/zero 怎么办?

    • 付杰 付杰

      @我不要不要 你得知道/dev/zero 这个下面的目录是做什么的?是否是你自己的业务?

  7. 头像 只要在一起 2

    CPU使用率100% 宝塔 php-fpm ,哎!好痛苦!

  8. 头像 为你唱一首歌 1

    我“laravel cpu 100% 内存才到50%”,好郁闷!

  9. 头像 用心等待你 2

    我也是“php fpm cpu高”,一言难尽!

  10. 头像 蓝牙 1

    我遇到了“ajax 服务器cpu 占用过高”,哎!

  11. 头像 0

    我有一个服务器的负载特别的高,如下:load average:63.13,109,31,78.01; 我们统计了一下,我有一个类似接口的东西,每秒要接收500个请求左右。 :arrow: