我有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,八核,8x 2.4 GHz,16 GB DIMM(DDR3)。
我不知道应该在这个服务器的 www.conf 文件中输入什么数字。我能帮到别人吗?谢谢
答案1
导致 PHP-FPM 达到 的可能原因有很多max_children
。最常见的原因有:
- 来自客户的大量并行请求
- PHP 脚本执行缓慢
- 非常低的设置
max_children
查看您的机器的规格,假设除了 PHP+Nginx 之外没有其他程序在运行,我认为您可以将其设置为远高于 5。您说您有 8 个核心,通常 Nginx 所需的 CPU 比 PHP 少得多,因此如果有 5 个子节点,您可能永远无法使用它们全部。我通常将其设置为类似于核心数 x 2或者核心数 x 4,取决于您的 PHP 脚本的内存消耗。
答案2
我发现设置 pm.max_requests 值(默认情况下被注释掉)有助于修复这些错误。此设置强制子请求在执行一定数量的请求后重新生成,如果您的代码或第三方库中存在内存泄漏,则此设置会很有帮助。
在/etc/php-fpm.d/www.conf:
pm.max_requests = 500
答案3
我的 docker php-fpm 遇到了同样的问题,我通过修改这些文件中的参数修复了它:/usr/local/etc/php-fpm.d/www.conf /usr/local/etc/php-fpm.d/www.conf.default
新参数为:
pm = 动态
pm.max_children = 25
pm.start_servers = 10
pm.min_spare_servers = 5
pm.max_spare_servers = 20
pm.max_requests = 500