php fpm程序管理的三種模式

2022-09-07 07:21:11 字數 2685 閱讀 2271

**自 php-fpm解讀-程序管理的三種模式

—程式媛大麗 標明**以示尊重 感謝原作者的分享。

php-fpm程序管理一共有三種模式:ondemand、static、dynamic,我們可以在同乙個fpm的master配置三種模式,看下圖1。php-fpm的工作模式和nginx類似,都是乙個master,多個worker模型。每個worker都在accept本pool內的監聽套接字(linux已不存在驚群現象)。

在php-fpm啟動的時候,不會給這個pool啟動任何乙個worker,是按需啟動,當有連線過來才會啟動。
配置檔案(我的配置檔案位址為:/usr/local/php/etc/php-fpm.conf)

當前pool的名字為test

原理

從上圖可以看出,新建worker的觸發條件是連線的到來,而不是實際的請求(例如,只進行連線比如telnet,不發請求資料也會新建worker)

worker的數量受限於pm.max_children配置,同時受限全域性配置process.max(準確的說,三種模式都受限於全域性配置)

秒定時器作用找到空閒worker,如果空閒時間超過pm.process_idle_timeout大小,關閉。這個機制可能會關閉所有的worker。

pm.max_children> 0

pm.process_idle_timeout> 0,如果不設定,預設10s

優點:按流量需求建立,不浪費系統資源(在硬體如此便宜的時代,這個優點略顯雞肋)

缺點:由於php-fpm是短連線的,所以每次請求都會先建立連線,建立連線的過程必然會觸發上圖的執行步驟,所以,在大流量的系統上master程序會變得繁忙,占用系統cpu資源,不適合大流量環境的部署

在php-fpm啟動時,會初始啟動一些worker,在執行過程中動態調整worker數量,worker的數量受限於pm.max_children配置,同時受限全域性配置process.max

當前pool的名字為test

1秒定時器作用檢查空閒worker數量,按照一定策略動態調整worker數量,增加或減少。增加時,worker最大數量<=max_children· <=全域性process.max;減少時,只有idle >pm.max_spare_servers時才會關閉乙個空閒worker。

idle > pm.max_spare_servers,關閉啟動時間最長的乙個worker,結束本次處理

idle >= pm.max_children,列印warning日誌,結束本次處理

idle < pm.max_children,計算乙個num值,然後啟動num個worker,結束本次處理

pm.min_spare_servers/pm.max_spare_servers有效範圍(0,pm.max_children]

pm.max_children> 0

pm.min_spare_servers<=pm.max_spare_servers

pm.start_servers有效範圍[pm.min_spare_servers,pm.max_spare_servers]如果沒有配置,預設pm.min_spare_servers + (pm.max_spare_servers - pm.min_spare_servers) / 2

優點:動態擴容,不浪費系統資源,master程序設定的1秒定時器對系統的影響忽略不計;

缺點:如果所有worker都在工作,新的請求到來只能等待master在1秒定時器內再新建乙個worker,這時可能最長等待1s;

php-fpm啟動採用固定大小數量的worker,在執行期間也不會擴容,雖然也有1秒的定時器,僅限於統計一些狀態資訊,例如空閒worker個數,活動worker個數,網路連線佇列長度等資訊。

原理

配置項要求1、pm.max_children> 0 必須配置,且只有這乙個引數生效

如果配置成static,只需要考慮max_children的數量,數量取決於cpu的個數和應用的響應時間,我司配置的是50。

我司不考慮動態的增加減少那麼十幾個或者幾十個worker,我們的記憶體沒有緊張到這個程度,所以,我們一步到位,把worker數配置到支援最大流量,(哈哈,50也是隨便定的,足矣足矣呢)

最後我們再介紹下worker的工作流程

fastcgi與php-fpm的關係一句話解讀:fastcgi只是通訊應用協議,php-fpm就是實現了fastcig協議,並嵌入了乙個 php 直譯器。

php fpm 程序管理的三種模式

php fpm程序管理一共有三種模式 ondemand static dynamic ondemand 在php fpm啟動的時候,不會給這個pool啟動任何乙個worker,是按需啟動,當有連線過來才會啟動。優缺點優點 按流量需求建立,不浪費系統資源 在硬體如此便宜的時代,這個優點略顯雞肋 缺點 ...

php fpm三種執行模式

配置檔案 php fpm.conf 開啟慢日誌功能的 slowlog usr local var log php fpm.log.slow request slowlog timeout 5s 當某個請求的時間超過了5秒,就會在慢日誌中記錄相應的記錄,注意上面的時間5s,不能忽略了單位,相應的還有其...

程序的三種狀態

程序的三種基本狀態 1 就緒狀態 程序已獲得除cpu外的所有必要資源,只等待cpu時的狀態。乙個系統會將多個處於就緒狀態的程序排成乙個就緒佇列。2 執行狀態 程序已獲cpu,正在執行。單處理機系統中,處於執行狀態的程序只乙個 多處理機系統中,有多個處於執行狀態的程序。3 阻塞狀態 正在執行的程序由於...