无论我将 pm.start_servers 或 pm.min/max_spare_servers 设置得多高,当 PHP-FPM 达到限制时,我总是会出现此错误:
WARNING: [pool web8] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 8 children, there are 31 idle, and 62 total children
我注意到,当我最频繁地重新加载 php-fpm 时,我从未见过这种错误。这也支持了这一点博客。
我的问题是每 9 分钟或按照您设置的任何间隔重新加载 php-fpm 是否可以。
更新:
这是我当前流量最高的两个网站的配置(每个网站都运行一个单独的池):
pm.max_children = 256
pm.start_servers = 50
pm.min_spare_servers = 40
pm.max_spare_servers = 192
pm.max_requests = 500
当内存使用量达到 90% 时,我也执行此命令:
/sbin/sysctl -w vm.drop_caches=3
执行命令后,使用的内存又回到了 30%。我不知道这是否又是一个坏主意。我这样做是因为如果不这样做,内存就会上升到 100%,并且会使用交换。
我正在运行以下规格:
Single Processors: WHT Xeon E3-1270 v2
32 GB RAM
答案1
不,每 N 分钟“优雅地”重新加载 PHP 是不行的。
他没有告诉你(甚至他自己可能也不知道)的是,当 php-fpm 重新加载时,它会在极短的时间内拒绝传入连接。在此间隔内访问你网站的用户将收到来自 nginx 的 502 Bad Gateway 错误。
pm.max_requests
此外,当设置为合理较低的值时,甚至没有必要这样做,因为子项将被自动回收。
要解决您的seems busy
问题,您只需正确调整 php-fpm 池即可。您有大量空闲服务器,但它生成了更多,这表明其中一个pm.min_spare_servers
或pm.max_spare_servers
两个设置得太高。尝试减少它们。