Nginx

正確理解 pm.max_children 調整

  • November 13, 2018

我做了一些調查,我發現這是計算和調整pm.max_children

https://myshell.co.uk/blog/2012/07/adjusting-child-processes-for-php-fpm-nginx/

但例如:

  • 我的伺服器上有 8Gb
  • 我託管 30 個網站
  • php-fpm 平均程序大小約為 40mb
  • php-fpm 最大程序大小約為 80mb
  • 我想將最大 5Gb 的記憶體分配給 php-fpm 程序

如果我應用這個:

pm.max_children = 專用於 Web 伺服器的總 RAM / 最大子程序大小

所以在我的情況下:

pm.max_children = 5120 / 80 = 64

但是如果我在每個 php-fpm 網站 conf 文件中添加pm.max_children = 64,這意味著每個網站可以使用64 個子程序X 1 個程序的大小(例如 40mb)= 2560Mb

如果我們想像,同時所有 30 個網站都達到 pm.max_children 值,我們將有:2560Mb(每個網站最大)x 30 個網站 = 76 800 Mb

我對麼?

是的,這意味著當許多網站託管在同一台伺服器上時,我們必須將計算結果pm.max_children = 5120 / 80 = 64除以託管網站的數量(這裡是 30)。

所以 64 / 30 = 2,1 和pm.max_children = 2每個網站

正確與否?

謝謝

根據我收集的資訊,您的計算是正確的。

只有在並非所有網站都同時使用所有可用資源的情況下,才能在同一台伺服器上擁有多個網站。這就是人們通常所說的過度配置。

但是,我建議不要簡單地計算pm.max_children可用 RAM,而是計算網路正常執行實際需要多少工作人員。從較低的東西開始並監控php-fpm.log. 如果max_children達到設置,你會在日誌中找到它,你可以增加它。

此外,請確保 PHP 工作人員僅在必要時存活。例如,以下配置將讓池使用多達 32 個 PHP 工作者,如果有請求突發,但每個工作者將在 3 秒不活動後退出並釋放寶貴的 RAM:

pm = ondemand
pm.max_children = 32
pm.process_idle_timeout = 3s

ondemand如果記憶體不足,請使用程序管理器。它比dynamicpm 慢一點,但不會為非活動網站浪費 RAM。

如果要控制 PHP 程序的總數,有一個設置叫做process.max. php-fpm.conf我從未使用過它,但在我看來,無論池的配置方式如何,您都可以使用它來確保工作人員的數量永遠不會超過一定數量。

順便說一句,為屬於不同使用者的不同 Web 使用不同的池是一個非常好的主意。這樣您就不會遇到使用者權限或從其他網站記憶體的數據的任何問題。

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