PHP-FPM程序模型詳解

語言: CN / TW / HK

本文將介紹以下內容:

  • PHP-FPM程序管理方式介紹
  • PHP-FPM如何與Nginx等Web伺服器進行通訊

先說一下PHP-FPM的程序模型,PHP-FPM採用的是Master/Worker程序模型。當PHP-FPM啟動時,會讀取配置檔案,然後建立一個Master程序和若干個Worker程序(具體是幾個Worker程序是由php-fpm.conf中配置的個數決定)。Worker程序是由Master程序fork出來的。

Master程序和Worker程序的作用:

  • Master程序:負責管理Worker程序、監聽埠
  • Worker程序:處理業務邏輯

PHP-FPM程序管理方式有動態(Dynamic)、靜態(Static)、按需(Ondemand)三種,下面將一一介紹。

動態(Dynamic) 在這種方式下,PHP-FPM啟動時會建立一定數量的Worker程序。當請求數逐漸增大時,會動態增加Worker程序的數量;當請求數降下來時,會銷燬剛才動態創建出來的Worker程序。在這種方式下,如果配置的最大程序數過大,當請求量增加時會出現大量Worker程序,程序之間會頻繁切換,浪費大量CPU資源。

下面的三個引數可以配置Worker程序的數量:

  • pm.start_servers:動態方式下的起始php-fpm程序數量。
  • pm.min_spare_servers:動態方式下的最小php-fpm程序數量。
  • pm.max_spare_servers:動態方式下的最大php-fpm程序數量。

靜態(Static) 這種方式下,PHP-FPM啟動時會建立配置檔案中指定數量的Worker程序,不會根據請求數量的多少而增加減少。因為PHP-FPM開啟的每個Worker程序同一時間只能處理一個請求,所以在這種方式下當請求增大的時候,將會出現等待的情形。

下面的引數可以配置Worker程序的數量: pm.max_children:靜態方式下開啟的php-fpm程序數量。

按需(Ondemand) 在這種方式下,PHP-FPM啟動時,不會建立Worker程序,當請求到達的時候Master程序才會fork出子程序。在這種模式下,如果請求量比較大,Master程序會非常繁忙,會佔用大量CPU時間。所以這種模式不適合大流量的環境。

 

在Nginx+PHP-FPM的架構中,Web伺服器是如何與PHP-FPM通訊的呢?

當用戶請求一個http地址時,Nginx會收到請求,然後將請求轉發給PHP-FPM,PHP-FPM收到請求後會將請求轉發給一個空閒的Worker程序。當Worker程序處理完後會將結果返回給Nginx,Ngixn再講內容返回給使用者。

以上內容希望幫助到大家,很多PHPer在進階的時候總會遇到一些問題和瓶頸,業務程式碼寫多了沒有方向感,更多PHP大廠PDF面試文件,PHP進階架構視訊資料,PHP精彩好文免費獲取可以關注公眾號:PHP開源社群,或者訪問:

2021金三銀四大廠面試真題集錦,必看!

四年精華PHP技術文章整理合集——PHP框架篇

四年精華PHP技術文合集——微服務架構篇

四年精華PHP技術文合集——分散式架構篇

四年精華PHP技術文合集——高併發場景篇

四年精華PHP技術文章整理合集——資料庫篇