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


41

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

警告:[pool www]服务器已达到pm.max_children设置(5),请考虑提高它。

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

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

服务器: AMD Opteron™3280,八核,8个2.4 GHz,16 GB DIMM(DDR3)。

我不知道我应该在此服务器的www.conf文件中输入什么数字。我可以帮忙吗?谢谢

Answers:


40

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

  • 来自客户的大量并行请求
  • PHP脚本执行缓慢
  • 极低的设置 max_children

查看计算机的规格,假设没有其他东西在运行PHP + Nginx,我认为您可以将其设置为高于5。您说您有8个核心,通常Nginx需要的CPU比PHP少得多,因此有5个子代您可能永远无法使用所有这些功能。我通常将其设置为内核数x 2内核数x 4之类的值,具体取决于您的PHP脚本的内存消耗。


这是一个具有php聊天功能的约会网站,用户可以发送数百万条即时消息。昨天晚上,当我有300〜用户在线参数,netstat -an命令| grep按80 |厕所-结果几乎400
user1821484

1
我实际上有一个类似的约会网站。我认为您肯定需要更多的PHP子级。我的配置如下:2万名并发在线用户,12台PHP机器,每台机器8个核心,每台PHP机器上32名工人。效果很好。您还应该查看您有多少可用内存,我怀疑您有一些可用内存,除非您的PHP很大。如果您有可用内存,为什么不将它用于更多的工作人员?
重播

@ user1821484这是正确的;pm.max_children太低了。对于具有1GB RAM的小型VPS服务器,值10是合理的。您有一个更大的服务器。增大此值,直到停止接收错误为止,然后再次增大它,以防出现流量高峰。
迈克尔·汉普顿

感谢您的回答。我将pm.max_children设置增加到10,现在开始出现此错误:警告:[pool www]似乎很忙(您可能需要增加pm.start_servers或pm.min / max_spare_servers),生成16个孩子,有0个空闲,共有8个孩子。有人可以建议我增加什么吗?谢谢。
user1821484

核心x 2或核心x 4听起来对我来说真的很低。我有一台具有8核和8GB RAM且pm.max_children = 48的计算机,但仍然使服务器达到了pm.max_children警告。这台机器的CPU或内存限制已达极限。我认为一种更好的方法是结合相应的nginx(或apache)设置来优化此设置,并在确定每个PHP进程消耗多少内存后选择一个值。
S. Imp

18

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

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

pm.max_requests = 500

13

链接可能是有用的-它说明了如何根据系统上的内存量来计算子进程的数量:


7
一旦该链接消失,该答案将无用。
miken32 '17

2
基本上,链接显示... pm.max_children的适当值可计算为:pm.max_children =专用于Web服务器的总RAM /最大子进程大小
jaywhy13
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.