Php5

PHP5-FPM 和“按需”

  • June 1, 2018

我已經用 Nginx 和 PHP5-FPM 建立了一個伺服器,一切執行良好。然而,隨著我向伺服器添加越來越多的站點,我發現記憶體使用量穩步增加,我得出的結論是 PHP5-FPM 是“罪魁禍首”。

我目前所做的是為每個站點設置一個單獨的 PHP5-FPM 池,並根據預期流量配置該池。但是,如果有足夠多的站點,我最終將擁有一個伺服器,它只支持相當大量的 PHP5-FPM “孩子”,它們只是在等待工作。

我剛剛發現了按需PHP5-FPM 模式,它允許我以某種方式配置 PHP5-FPM,以便僅在實際需要時分叉子程序,然後在給定的持續時間內保持活動狀態以進行處理。

但是,我真的找不到太多關於此的細節。我最好奇的是變數pm.max_childrenpm.max_requests如何影響按需模式(如果有的話)。我假設變數pm.start_serverspm.min_spare_serverspm.max_spare_servers不適用於按需模式。

沒錯,start_servers、min_spare_servers 和 max_spare_servers 不適用於按需模式。以下變數適用於按需模式:

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

當您設置 pm = ondemand 時,FPM 將在需要時立即分叉子節點,始終保持子節點數量小於或等於 pm.max_children,因此該變數是同時分叉子節點數量的上限。

其他兩個變數允許您指定何時必須銷毀子項:

  • pm.process_idle_timeout 設置孩子在被銷毀之前等待多長時間沒有工作。它以秒為單位定義。
  • pm.max_requests 定義子程序在銷毀之前將處理多少個請求(一次一個)。例如,如果您將此變數設置為 50,則子程序將處理 50 個請求並自行關閉。如果 FPM 主程序還需要另一個子程序,它將分叉一個新的子程序。

在我公司,我們在 FPM 上使用 ondemand 模式,我們使用 pm.max_requests 來強制回收 fpm children,避免高記憶體使用。

希望這可以幫助,

問候。

引用自:https://serverfault.com/questions/478281