天天看點

php-fpm的運作原理和運作模式

運作原理:

  1. cgi初始化階段:分别調用fcgi_init()和 sapi_startup()函數,注冊程序信号以及初始化sapi_globals全局變量。
  2. php環境初始化階段:由cgi_sapi_module.startup 觸發。實際調用php_cgi_startup函數,而php_cgi_startup内部又調用php_module_startup執行。 php_module_startup主要功能:a).加載和解析php配置;b).加載php子產品并記入函數符号表(function_table);c).加載zend擴充 ; d).設定禁用函數和類庫配置;e).注冊回收記憶體方法;
  3. php-fpm初始化階段:執行fpm_init()函數。負責解析php-fpm.conf檔案配置,擷取程序相關參數(允許程序打開的最大檔案數等),初始化程序池及事件模型等操作。
  4. php-fpm運作階段:執行fpm_run() 函數,運作後主程序發生阻塞。該階段分為兩部分:fork子程序 和 循環事件。fork子程序部分交由fpm_children_create_initial函數處理( 注:ondemand模式在fpm_pctl_on_socket_accept函數建立)。循環事件部分通過fpm_event_loop函數處理,其内部是一個死循環,負責事件的收集工作。

運作模式

php-fpm支援三種運作模式,分别為static、ondemand、dynamic,預設為dynamic 。

  1. static: 靜态模式,啟動時配置設定固定的worker程序。
  2. ondemand: 按需配置設定,當收到使用者請求時fork worker程序。
  3. dynamic: 動态模式,啟動時配置設定固定的程序。伴随着請求數增加,在設定的浮動範圍調整worker程序。