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

use*_*484 58 php-fpm

我有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
Run Code Online (Sandbox Code Playgroud)

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

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

rep*_*lay 56

您的 PHP-FPM 达到max_children. 最常见的是:

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

看你机器的规格,假设除了 PHP+Nginx 运行没有别的,我想你可以把它设置得比 5 高很多。你说你有 8 个内核,通常 Nginx 需要的 CPU 比 PHP 少得多,所以有 5 个孩子你可能永远无法使用所有这些。我通常将其设置为内核数 x 2内核数 x 4 之类的值,具体取决于 PHP 脚本的内存消耗。

  • 我实际上有一个类似的约会网站。我想你肯定需要更多的 PHP 孩子。我的配置如下:20k并发在线用户,12台PHP机器,每台8核,每台PHP机器上有32个worker。这效果很好。你还应该看看你有多少可用内存,我怀疑你有一些,除非你的 PHP 很大。如果你有空闲内存,为什么不将它用于更多的工作人员呢? (2认同)

小智 28

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

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

pm.max_requests = 500
Run Code Online (Sandbox Code Playgroud)