phpphpfpm
1. FPM看這一篇就夠了
Fpm是PHP FastCGI運行模式的進程管理器,其主要功能在於管理PHP處理請求的進程,以優化伺服器性能。FastCGI協議作為Web伺服器(如Nginx、Apache)和處理程序(如PHP)之間的通信協議,用於在應用層實現兩者間的交互。當PHP處理完請求後,通過FastCGI協議將解析結果返回給Web伺服器,最終由Web伺服器將內容發送給用戶。
Fpm採用多進程模型,由master進程和多個worker進程組成。master進程啟動後創建socket,但不直接處理請求,而是由fork出的worker進程處理請求。master進程負責fork和殺掉worker進程,以動態管理進程數量。在master進程fork出worker後,會循環事件列表,worker進程則不斷接受請求,解析FastCGI協議數據,執行PHP腳本,並關閉請求。整個worker處理請求的過程包括等待請求、解析請求、請求初始化、執行PHP腳本和關閉請求等步驟。
在處理請求時,worker進程會記錄其當前所處的階段,如等待請求階段、讀取fastcgi請求header階段、獲取請求信息階段、執行PHP腳本階段和請求處理完成階段,以方便管理進程狀態。
master進程主要負責進程管理。它在啟動後不再返回,進入事件循環,處理IO及定時器事件,以動態控制worker的數量。master進程會根據配置文件中的pm參數,選擇靜態模式、動態模式或按需模式來管理worker進程。靜態模式下,master在啟動時根據配置參數fork出固定數量的worker進程。動態模式下,master根據配置參數初始化一定數量的worker進程,並在請求增多時增加worker進程,減少時減少worker進程。按需模式下,master不預先分配worker進程,而是等到有請求時才通知master進程fork worker進程,處理完成後worker進程不會立即退出,當空閑時間超過配置參數後才退出。
除了進程管理,master還處理信號事件、進程檢查定時器和執行超時檢查定時器。信號事件允許master響應系統信號,如SIGINT、SIGTERM、SIGQUIT等,以便在接收到退出信號時通知所有worker退出,並確保master正常退出。進程檢查定時器用於定期檢查worker進程數量,動態調整進程數量以優化資源使用。執行超時檢查定時器用於監控worker處理請求的時間,如果請求處理時間超過設定的閾值,master將向worker進程發送kill -TERM信號以終止進程。
綜上所述,Fpm作為PHP FastCGI運行模式的進程管理器,通過多進程模型和動態管理策略,優化了PHP處理請求的性能,提高了伺服器響應速度和資源利用率。