php-fpm.log出现“WARNING: [pool www] seems busy”原因与解决方法

由于时间耽误了,今天才把文章整理出来。前几天的时候,一位朋友他在Linux服务器用“top"命令的时候,发现“平均负载 Load Average”非常的高,高达40、50、60左右了。如下图:

平均负载 Load Average很高

 

从上图,你还会发现%Cpu这里,us也占了93.8%。这里占用高,说明服务器上的程序应用访问用户比较多。

 

除以上截图之外,top"命令后,还出现了“php-fpm占用cpu过高“,所有的几个php-fpm加起来会接近100%,由于没来得及截图存起来,大家知道一下就行了。

 

后来,我去查看了php-fpm日志文件:php-fpm.log ,发现有提示内容如下,由于当天的内容日志很多,很多都是重复的,我整理结果如下:

[21-Jan-2021 01:47:58] WARNING: [pool www] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 32 children, there are 0 idle, and 19 total children
[21-Jan-2021 01:47:59] WARNING: [pool www] server reached pm.max_children setting (20), consider raising it
[21-Jan-2021 05:02:58] WARNING: [pool www] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 8 children, there are 0 idle, and 18 total children
[21-Jan-2021 05:03:02] WARNING: [pool www] server reached pm.max_children setting (20), consider raising it
[21-Jan-2021 05:14:20] WARNING: [pool www] server reached pm.max_children setting (20), consider raising it
[21-Jan-2021 05:33:02] WARNING: [pool www] server reached pm.max_children setting (20), consider raising it

中文翻译

[21-Jan-2021 01:47:58] 警告:[pool www]似乎很忙(您可能需要增加 pm.start_servers或pm.min / max_spare_servers),产生32个孩子,有0个空闲,总共19个 孩子们
[21-Jan-2021 01:47:59]警告:[pool www]服务器已达到pm.max_children设置(20),请考虑将其提高

 

原因:

从上面,我们可以先分析验证问题:

1、报警级别“WARNING”,也就是说业务受到的影响比较小,实际验证也是这样;

2、php-fpm的进程数比较少,建议增加 pm.start_servers 或 pm.min/max_spare_servers 或 pm.max_children

3、增加到多少呢?spawning 8,也就是说至少得8个进程;

 

解决方法

 

第一步:执行命令:

ps -ef  | grep php

可以得到当前的php-fpm进程数以及php-fpm.conf配置文件位置。

我的这位朋友这里肯定是只有20个进程数了。

 

第二步:修改 php-fpm.conf 文件

由于我用的是 pm = dynamic,再加上php-fpm.log有一个提示:spawning 32,其它的都是spawning 8,因此我个人设置如下:

pm.start_servers = 20;
pm.min_spare_servers = 20;
pm.max_spare_servers = 42;

 

pm = dynamic 如何控制子进程,选项有static和dynamic

 

pm.max_children:静态方式下开启的php-fpm进程数量

 

pm.max_requests:php-fpm子进程能处理的最大请求数

 

pm.start_servers:动态方式下的起始php-fpm进程数量

pm.min_spare_servers:动态方式下的最小php-fpm进程数

pm.max_spare_servers:动态方式下的最大php-fpm进程数量

 

区别:

如果pm设置为 static,那么,其实只有pm.max_children这个参数生效。系统会开启设置数量的php-fpm进程。

如果pm设置为 dynamic,那么pm.max_children参数失效,后面3个参数生效。

 

第三步:重启php-fpm验证结果与持续观察

 

1、杀掉php-fpm所有的进程

pkill -9 php-fpm

 

2、重启php-fpm

cd /usr/local/php
./sbin/php-fpm

 

3、经过我后续观察php-fpm日志,未发现类似日志出现。

再观察平均负载,后面也慢慢恢复正常了,最高也就不超过3。

    A+
发布日期:2021年01月25日 11:04:31  所属分类:PHP
最后更新时间:2021-01-25 11:10:28
付杰
  • ¥ 1999.9元
  • 市场价:20000元
  • ¥ 68.0元
  • 市场价:98.0元
  • ¥ 69.0元
  • 市场价:99.0元
  • ¥ 298.0元
  • 市场价:498.0元

发表评论

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