phpfpm平滑重啟
① 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進階架構師實戰視頻、大廠面試文檔免費獲取](鏈接)
② php-fpm的FAQ
Q:php-fpm 可以和 ZendOptimize 一起用嗎?
A:完全可以。
Q:php-fpm 可以和 ZendPlatform、xcache、eAccelerator、APC 等的優化器一起用嗎?
A:是的。php-fpm 的架構和任何一種用於高速 opcode 緩存的共享內存都適用。唯一的限制是:所有的 worker 進程只能適用一個緩存,即使它們用不同的 uid/gid 運行
Q:為什麼我要給php打補丁呢?spawn-fcgi 不需要這樣!
A:php-fpm 的創建是為了增強方便管理。沒有打過補丁的php不能做到:
平滑重啟php而不丟失請求,包括升級 php二進制文件以及/或者 擴展。
用不同的 uid / gid / chroot 環境運行 worker 進程
所有的設置只有一個配置文件
根據負載動態請求 (TODO)
對php請求實時統計性能 (TODO)
Q:為什麼要用 root 運行php-fpm 呢?這安全嗎?
A:用 root 啟動php-fpm 只有在你打算用不同 uid/gid 的 php 來處理請求時才有意義。比如,在共享主機上的不同站點。因為只有在 master 進程用 root 運行的時候,才可以建立不同 uid/gid 的子進程。這是相當安全的。master 進程自己從來不會去處理請求。
在任何情況下,php-fpm 都不會用 root 身份來處理請求。
Q:php-fpm 可以加速 php 腳本處理速度嗎?
A:不,它不會影響處理速度。不過,如果你使用一些特殊特性,對於一些特定的請求還是可以有性能提升的。
Q:如果我把我的網站從 mod_php遷移到php-fpm ,我會得到性能提升嗎?
A:通常,當有伺服器上有大量空閑內存可用時,能從遷移到 php-fpm 中得到的性能提升可能不大。但是如果內存並不充裕,性能提升還是很可觀的,在某些情況下可以達到 300-500%。這可能是由於 nginx +php-fpm 一般會比 Apache + mod_php 使用更少的內存。而且 VFS 緩存會由於更多的空餘內存而更有效地工作。
Q:php-fpm 將來會被官方的 php 包含嗎?
A:我希望如此。php-fpm 代碼採用的是GPL許可證 。所以現在php-fpm 的代碼與 php 協議(類似BSD許可證)並不匹配 。這是臨時性措施。這樣的選擇是為了簡化開發過程。一旦代碼的功能完備,比如自適應生成子進程和其他一些東西,協議會改為一個相匹配的。之後,php-fpm 會正式發布給 php 開發團隊,並被建議包含。