我build立了一个Nginx和PHP5-FPM的服务器,事情运行良好。 但是,随着我向服务器添加越来越多的站点,我发现内存使用率稳步增长,我得出的结论是PHP5-FPM是“责备”的。
我目前所做的是为每个站点设置单独的PHP5-FPM池,并根据预期的stream量configuration该池。 但是,如果有足够的网站,我最终会有一台服务器,它只是在等待工作的相当多的PHP5-FPM“孩子”上工作。
我刚刚发现了按需 PHP5-FPM模式,它允许我以某种方式configurationPHP5-FPM,以便subprocess只在实际需要时分叉,然后在给定的持续时间内保持活动状态以进行处理。
但是,我不能在这方面find太多的细节。 我最感兴趣的是variablespm.max_children和pm.max_requests如何影响按需模式(如果有的话)。 我假设variablespm.start_servers , pm.min_spare_servers , pm.max_spare_servers不适用于onmand模式。
你是对的,start_servers,min_spare_servers和max_spare_servers不适用于onmand模式。 以下variables适用于按需模式:
当你设置pm = ondemand时,FPM将会根据需要尽快分出儿童,总是让孩子小于或等于pm.max_children,所以这个variables是同时分出的儿童数的上限。
另外两个variables允许你指定一个孩子何时被销毁:
pm.process_idle_timeout设置一个孩子在没有工作的情况下等待多久才被销毁。 它是在几秒钟内定义的。
pm.max_requests定义了一个孩子在被销毁之前处理的请求数量(一次一个)。 例如,如果将此variables的值设置为50,则子代将处理50个请求并自行closures。 如果FPM主进程仍然需要另一个孩子,它将分叉一个新的。
在我们公司,我们在FPM上使用ondemand模式,我们使用pm.max_requests来强制回收fpm儿童,并避免使用高内存。
希望这可以帮助,
问候。
这可能是这个错误https://bugs.php.net/bug.php?id=72935
TLDR; 如果两个客户端在同一unix套接字上按需模式连接到PHP-FPM之前accept()发生在孩子中只有一个获得accept()。