php5-fpm:服务器达到pm.max_children

我有Nginx + php5-fpm。 每小时几次我的网站,并在日志文件中看到以下内容:

WARNING: [pool www] server reached pm.max_children setting (5), consider raising it. 

/etc/php5/fpm/pool.d/www.conf文件包含以下configuration:

 pm = dynamic pm.max_children = 5 pm.start_servers = 2 pm.min_spare_servers = 1 pm.max_spare_servers = 3 

服务器: AMD Opteron™3280,Octo-Core,8x 2.4 GHz,16 GB DIMM(DDR3)。

我不知道我应该在这个服务器的www.conf文件中input什么数字。 我可以帮助别人吗? 谢谢

PHP-FPM可能会达到max_children的原因有很多。 最常见的是:

  • 很多来自客户的并行请求
  • 缓慢执行PHP脚本
  • max_children的设置非常低

看看你的机器的规格,假设除了运行PHP + Nginx之外没有别的东西,我认为你可以把它设置得远远高于5.你说你有8个核心,通常Nginx需要比PHPless得多的CPU,所以有5个孩子你可能永远无法使用所有这些。 我通常将其设置为像核心数量x 2或核心数量x 4,取决于您的PHP脚本的内存消耗。

我发现通过设置pm.max_requests值(默认情况下已注释掉)有助于修复这些错误。 这个设置强制子请求在执行一定数量的请求之后重新生成,如果代码或第三方库中存在内存泄漏,可能会有所帮助。

/etc/php-fpm.d/www.conf中

 pm.max_requests = 500 

这个链接可能是有用的 – 它解释了如何根据系统的内存量计算subprocess的数量: