我正在尝试在基于 8GB RAM、2v Cores、使用 nginx 和 php7-fpm 的 VPS Debian 上解决这个问题。
检查后/var/log/php7.0-fpm.log
我发现有很多这样的警告:
WARNING: [pool www] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 16 children, there are 0 idle, and 7 total children
这是我的/etc/php/7.0/fpm/pool.d/www.conf
:
pm = dynamic
pm.max_children = 10
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
;pm.process_idle_timeout = 10s;
pm.max_requests = 200
有人能帮我解决这个问题吗?
更新:
我已将值增加到:
pm.max_children = 100
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 10
pm.max_requests = 500
在错误日志中我继续收到:
[06-Oct-2016 16:35:08] WARNING: [pool www] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 32 children, there are 4 idle, and 17 total children
答案1
当有请求进入时,PHP-FPM 需要启动一个新的子进程来处理请求,而不是使用现有的子进程,就会出现错误。
发生这种情况是因为您在池配置中设置的数字非常小。
这些数字表示您最多允许同时运行 10 个 PHP 进程。您从 2 个子进程开始,并且只有 1 个最小服务器随时准备处理请求。
如果您的网站有空闲时间,PHP-FPM 会关闭所有空闲进程,以便最多有 3 个进程在线准备处理请求。
我会乘以:
pm.max_children
pm.start_servers
pm.min_spare_servers
ps.max_spare_servers
每个数字乘以 5,这是一个合适的起始数字。
然后,您只需监控您的流量并检查这些错误是否再次出现,然后相应地调整数字。