PHP5-FPM 和“按需”

sbr*_*tla 4 php5 php-fpm

我已经使用 Nginx 和 PHP5-FPM 设置了一个服务器,并且一切运行良好。然而,随着我向服务器添加越来越多的站点,我发现内存使用量稳步增加,我得出的结论是 PHP5-FPM 是“罪魁祸首”。

我目前所做的是为每个站点设置一个单独的 PHP5-FPM 池,并根据预期流量配置该池。但是,有了足够多的站点,我最终将拥有一个服务器,该服务器仅支持大量等待工作的 PHP5-FPM“子项”。

我刚刚发现了ondemand PHP5-FPM 模式,它允许我以某种方式配置 PHP5-FPM,以便子进程仅在实际需要时分叉,然后在给定的持续时间内保持活动状态以进行处理。

但是,我真的找不到太多细节。我最好奇的是这些变量如何pm.max_childrenpm.max_requests影响按需模式(如果有的话)。我假设变量pm.start_serverspm.min_spare_serverspm.max_spare_servers并不适用于按需模式。

Jua*_*rso 11

你是对的,start_servers、min_spare_servers 和 max_spare_servers 不适用于按需模式。以下变量适用于按需模式:

  • pm.max_children
  • pm.process_idle_timeout
  • pm.max_requests

当设置pm = ondemand时,FPM会在需要的时候立即fork childs,始终保持children数小于或等于pm.max_children,所以这个变量是同时fork的childrens数的上限。

另外两个变量允许您指定何时必须销毁子项:

  • pm.process_idle_timeout 设置子进程在没有工作的情况下等待多长时间才能被销毁。它以秒为单位定义。

  • pm.max_requests 定义子进程在被销毁之前将处理多少个请求(一次一个)。例如,如果您将此变量的值设置为 50,则子代将处理 50 个请求并自行关闭。如果 FPM 主进程还需要另一个子进程,它将派生一个新的子进程。

在我公司,我们在 FPM 上使用按需模式,我们使用 pm.max_requests 强制回收 fpm 子项并避免高内存使用率。

希望这可以帮助,

你好。

  • 我们对每个新设置的默认值是 50。但是,我已经对较低和较高的值进行了测试。就我个人而言,我不会低于 15 或 10,因为它会导致如此多的 kill/fork 事件,并降低性能。另一方面,我认为高于 100 / 150 的值对于我们的强制回收模型来说太高了。 (2认同)