phpfpm線程
① php涓鐨凢PM鏄鍋氫粈涔堢殑
FPM錛團astCGI 榪涚▼綆$悊鍣錛夌敤浜庢浛鎹 PHP FastCGI 鐨勫ぇ閮ㄥ垎闄勫姞鍔熻兘錛屽逛簬楂樿礋杞界綉絝欐槸闈炲父鏈夌敤鐨勩傚畠鐨勫姛鑳藉寘鎷錛
鏀鎸佸鉤婊戝仠姝/鍚鍔ㄧ殑楂樼駭榪涚▼綆$悊鍔熻兘錛
鍙浠ュ伐浣滀簬涓嶅悓鐨 uid/gid/chroot 鐜澧冧笅錛屽苟鐩戝惉涓嶅悓鐨勭鍙e拰浣跨敤涓嶅悓鐨 php.ini 閰嶇疆鏂囦歡錛堝彲鍙栦唬 safe_mode 鐨勮劇疆錛夛紱
stdout 鍜 stderr 鏃ュ織璁板綍;
鍦ㄥ彂鐢熸剰澶栨儏鍐電殑鏃跺欒兘澶熼噸鏂板惎鍔ㄥ苟緙撳瓨琚鐮村潖鐨 opcode;
鏂囦歡涓婁紶浼樺寲鏀鎸;
"鎱㈡棩蹇" - 璁板綍鑴氭湰錛堜笉浠呰板綍鏂囦歡鍚嶏紝榪樿板綍 PHP backtrace 淇℃伅錛屽彲浠ヤ嬌鐢 ptrace鎴栬呯被浼煎伐鍏瘋誨彇鍜屽垎鏋愯繙紼嬭繘紼嬬殑榪愯屾暟鎹錛夎繍琛屾墍瀵艱嚧鐨勫紓甯哥紦鎱;
fastcgi_finish_request() - 鐗規畩鍔熻兘錛氱敤浜庡湪璇鋒眰瀹屾垚鍜屽埛鏂版暟鎹鍚庯紝緇х畫鍦ㄥ悗鍙版墽琛岃楁椂鐨勫伐浣滐紙褰曞叆瑙嗛戣漿鎹銆佺粺璁″勭悊絳夛級錛
鍔ㄦ侊紡闈欐佸瓙榪涚▼浜х敓錛
鍩烘湰 SAPI 榪愯岀姸鎬佷俊鎮錛堢被浼糀pache鐨 mod_status錛夛紱
鍩轟簬 php.ini 鐨勯厤緗鏂囦歡銆
② PHP-FPM詳解
PHP-FPM,全稱為PHP FastCGI Process Manager,是一個用於管理PHP進程池的軟體,專門用於接收web伺服器的請求。它提供了一種更有效的PHP進程管理方式,可以優化內存和進程管理,實現平滑重載PHP配置。
PHP-FPM的出現源於對php-fastcgi的需求。php-fastcgi是一個只解析PHP請求並返回結果的CGI程序。隨著需求的增長,為了更好地管理php-fastcgi,PHP-FPM應運而生。
在CGI年代,每次請求都需要讀取配置信息並初始化執行環境,這導致了頻繁的進程創建和銷毀。隨著PHP進入5時代,人們開始嘗試優化這種工作方式。通過引入一次啟動主進程(master)和多個工作進程(worker)的模式,可以減少重復勞動。這樣,當請求到來時,master進程會傳遞給worker進程處理,大大提高了效率。
當使用fastcgi時,如果worker進程數量不足,master進程會根據配置信息動態啟動更多worker進程。當空閑時,可以收回worker進程,實現資源的高效利用。
PHP-FPM不僅僅是一個程序,它是一個完整的解決方案,包括主進程和多個子進程的管理。主進程負責控制何時創建和銷毀子進程,以及處理更多或更少的HTTP請求。子進程可以處理10、50、100、500或更多的HTTP請求,而整個進程池的生命周期通常比單個HTTP請求要長。
在安裝方面,從PHP 5.3.3版本開始,PHP-FPM已經集成到了PHP的核心代碼中,不需要單獨下載安裝。若要使PHP支持PHP-FPM,只需要在編譯PHP源碼時使用`--enable-fpm`選項即可。
在配置方面,Centos中的PHP-FPM主配置文件通常是`/etc/php7/php-fpm.conf`。配置文件中定義了在一段時間內有多少個子進程失效後,PHP-FPM會自動重啟。此外,配置文件還包括配置進程池的部分,通常為每個PHP應用設置一個獨立的進程池。
在Centos中,PHP-FPM的配置文件頂部通常引入了進程池定義文件,例如`www.conf`。為了進行配置,需要編輯並保存文件,然後重啟PHP-FPM主進程。關於更多詳細配置信息,可以查閱`php.net/manual/install`。
在實際應用中,需要考慮PHP-FPM的最大進程數、nginx的並發數(作為代理伺服器的角色)、內存佔用、CPU開銷以及伺服器的QPS(每秒處理請求數)等參數。QPS和並發量的計算方法如下:伺服器的QPS = 平均請求連接數 * (1/響應時間),並發量 = 有效時間 * QPS。
希望以上內容能夠幫助大家理解PHP-FPM在伺服器和應用性能優化中的作用。對於進階的PHP開發者,我整理了一些資料,涵蓋了分布式架構、高可擴展性、高性能、高並發處理、伺服器性能調優、TP6、laravel、YII2、Redis、Swoole、Swoft、Kafka、Mysql優化、shell腳本、Docker、微服務、Nginx等高級進階知識點,有需要的開發者可以免費獲取,獲取鏈接如下:[PHP進階架構師實戰視頻、大廠面試文檔免費獲取](鏈接)