PHPFastCGI進程管理器PHP

PHP-FPM是一個PHPFastCGI進程管理器,是隻用於PHP的。
      PHP-FPM其實是PHP源代碼的一個補丁,旨在將FastCGI進程管理整合進PHP包中。必須將它patch到你的PHP源代碼中,在編譯安裝PHP後纔可以使用。
      現在我們可以在最新的PHP 5.3.2的源碼樹裏下載得到直接整合了PHP-FPM的分支,據說下個版本會融合進PHP的主分支去。相對Spawn-FCGI,PHP-FPM在CPU和內存方面的控制都更勝一籌,而且前者很容易崩潰,必須用crontab進行監控,而PHP-FPM則沒有這種煩惱。
      PHP5.3.3已經集成php-fpm了,不再是第三方的包了。PHP-FPM提供了更好的PHP進程管理方式,可以有效控制內存和進程、可以平滑重載PHP配置,比spawn-fcgi具有更多優點,所以被PHP官方收錄了。            在./configure的時候帶 –enable-fpm參數即可開啓PHP-FPM。
      使用PHP-FPM來控制PHP-CGI的FastCGI進程
/usr/local/php/sbin/php-fpm{start|stop|quit|restart|reload|logrotate}
--start 啓動php的fastcgi進程
--stop 強制終止php的fastcgi進程
--quit 平滑終止php的fastcgi進程
--restart 重啓php的fastcgi進程
--reload 重新平滑加載php的php.ini
--logrotate 重新啓用log文件

      php-fpm有兩種執行方式, 與Apache一樣,他的進程數也是可以根據設置分爲動態和靜態的,一種是直接開啓指定數量的php-fpm進程,不再增加或者減少;另一種則是開始的時候開啓一定數量的php-fpm進程,當請求量變大的時候,動態的增加php-fpm進程數到上限,當空閒的時候自動釋放空閒的進程數到一個下限。

      這兩種不同的執行方式,可以根據服務器的實際需求來進行調整。

      這裏先說一下涉及到這個的幾個參數吧,他們分別是pmpm.max_childrenpm.start_serverspm.min_spare_serverspm.max_spare_servers

pm表示使用那種方式,有兩個值可以選擇,就是static(靜態)或者dynamic(動態)。在更老一些的版本中,dynamic被稱作apache-like。這個要注意看配置文件給出的說明了。

      下面4個參數的意思分別爲:

pm.max_children:靜態方式下開啓的php-fpm進程數量。
pm.start_servers:動態方式下的起始php-fpm進程數量。
pm.min_spare_servers:動態方式下的最小php-fpm進程數量。
pm.max_spare_servers:動態方式下的最大php-fpm進程數量。

      如果dm設置爲static,那麼只有pm.max_children這個參數生效。系統會開啓設置的數個php-fpm進程。

      如果dm設置爲dynamic,那麼pm.max_children參數失效,後面3個參數生效。系統會在php-fpm運行開始的時候啓動 pm.start_servers個php-fpm進程,然後根據系統的需求動態在pm.min_spare_servers和 pm.max_spare_servers之間調整php-fpm進程數。

      那麼,對於我們的服務器,選擇哪種執行方式比較好呢?事實上,跟Apache一樣,我們運行的PHP程序在執行完成後,或多或少會有內存泄露的問 題。這也是爲什麼開始的時候一個php-fpm進程只佔用3M左右內存,運行一段時間後就會上升到20-30M的原因了。所以,動態方式因爲會結束掉多餘 的進程,可以回收釋放一些內存,所以推薦在內存較少的服務器或者VPS上使用。具體最大數量根據 內存/20M 得到。比如說512M的VPS,建議pm.max_spare_servers設置爲20。至於pm.min_spare_servers,則建議根據服 務器的負載情況來設置,比較合適的值在5~10之間。

      然後對於比較大內存的服務器來說,設置爲靜態的話會提高效率。因爲頻繁開關php-fpm進程也會有時滯,所以內存夠大的情況下開靜態效果會更好。數量也可以根據 內存/30M 得到。比如說2GB內存的服務器,可以設置爲50;4GB內存可以設置爲100等。

      DEMO參數如下:

pm=dynamic
pm.max_children=20
pm.start_servers=5
pm.min_spare_servers=5
pm.max_spare_servers=20

      這樣就可以最大的節省內存並提高執行效率。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章