PHP-FPM的三種模式和worker進程、master進程詳解


一:首先介紹PHP-FPM 的三種模式

首先看php配置文件中的說明。

 

 

 

(1)pm=static
  始終保持固定數量的worker進程數,由pm.max_children決定,不會動態擴容。

  配置項要求

  1、pm.max_children> 0 必須配置,且只有這一個參數生效

  優缺點

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

(2)pm=dynamic

  php-fpm啟動時,會初始啟動一些worker,初始啟動worker數決定於pm.max_children的值。在運行過程中動態調整worker數量,worker的數量受限於pm.max_children配置,同時受限全局配置process.max。
  1秒定時器作用,檢查空閑worker數量,按照一定策略動態調整worker數量,增加或減少。增加時,worker最大數量<=max_children· <=全局process.max;減少時,只有idle >pm.max_spare_servers時才會關閉一個空閑worker。

  優缺點
  優點:動態擴容,不浪費系統資源
  缺點:如果所有worker都在工作,新的請求到來只能等待master在1秒定時器內再新建一個worker,這時可能最長等待1s


(3)pm=ondemand

  php-fpm啟動的時候,不會啟動任何一個worker,而是按需啟動,只有當連接過來的時候才會啟動。
  啟動的最大worker數決定於pm.max_children的值,同時受限全局配置process.max。
  1秒定時器作用,如果空閑worker時間超過pm.process_idle_timeout的值(默認值為10s),則關閉該worker。這個機制可能會關閉所有的worker。

  優缺點
  優點:按流量需求創建,不浪費系統資源
  缺點:由於php-fpm是短連接的,所以每次請求都會先建立連接,頻繁的創建worker會浪費系統開銷。,所以,在大流量的系統上,master進程會變得繁忙,占用系統cpu資源,不適合大流量環境的部署。

 

pm模式設置在/etc/php-fpm.d文件中
可以看到php7.0的默認pm值為dynamic,pm.max_children值為5

 

 一個master進程,2個worker進程

 

 

worker進程、master進程詳解

master只是負責監聽管理工作,並不是很多人認為的把客戶端發來的請求分給worker進程處理,而是由worker進程負責客戶端的請求監聽和處理

 

 可以看到一旦kill掉worker進程后,會重啟一個新的worker進程。因此客戶端請求肯定會得到響應處理。master進程負責監聽子進程的狀態,子進程掛掉之后,會發信號給master進程,然后master進程重新啟一個新的worker進程。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM