PHP的FastCGI使你的所有php應用軟體通過mod_fastci運行,而不是mod_phpsusexec。 FastCGI應用速度很快 是因為他們持久穩定。 不必對每一個請求都啟動和初始化。 這使得應用程式的開發成為可能,否則在CGI範例是不切實際的(例如一個大型的腳本,或者一個需要 連接單個或多個資料庫的應用)。
好處
PHP腳本運行速度更快(3到30倍)。 PHP解釋程式被載入記憶體而不用每次需要時從儲存體讀取,極大的提升了依靠腳本運行的網站的性能。 需要使用更少的系統資源。 由於伺服器不用每次需要時都載入PHP解釋程式,你可以將網站的傳送速率提升很高而不必增加cpu負擔。 不需要對現有的代碼作任何改變。 現有的一切都適用于PHP的FastCGI
潛在問題
對所有的子目錄(/home/USERNAME/public_html/php.ini)你只有一個可用的php.ini檔。 這是優化網站代碼所必需的。 如果你需要多個php.ini檔以適應不同的腳本需要,你可以在任何子目錄禁用PHP的快速CGI,而其餘的地方則繼續有 效。 如果你需要這樣做請聯繫support。 你對PHP環境做的任何升級(如php.ini檔的改變)都有幾分鐘的延遲。 這是因為為了更快的速度 你的php.ini檔已經被載入記憶體,而不是每次需要時再從儲存體重新讀取。
FastCGI的工作原理
1、Web Server啟動時載入FastCGI進程管理器(IIS ISAPI或HTTP://www.aliyun.com/zixun/aggregation/14417.html">Apache Module)
2、FastCGI進程管理器自身初始化,啟動多個CGI解譯器進程(可見多個php-cgi)並等待來自Web Server的連接。
3、當用戶端請求到達Web Server時,FastCGI進程管理器選擇並連接到一個CGI解譯器。 Web server將CGI環境變數和標準輸入發送到FastCGI子進程php-cgi。
4、FastCGI子進程完成處理後將標準輸出和錯誤資訊從同一連接返回Web Server。 當FastCGI子進程關閉連接時,請求便告處理完成。 FastCGI子進程接著等待並處理來自FastCGI進程管理器(運行在Web Server中)的下一個連接。 在CGI模式中,php-cgi在此便退出了。
在上述情況中,你可以想像CGI通常有多慢。 每一個Web請求PHP都必須重新解析php.ini、重新載入全部擴展並重初始化全部資料結構。 使用FastCGI,所有這些都只在進程啟動時發生一次。 一個額外的好處是,持續資料庫連接(Persistent database connection)可以工作。
FastCGI的不足
因為是多進程,所以比CGI多執行緒消耗更多的伺服器記憶體,PHP-CGI解譯器每進程消耗7至25兆記憶體,將這個數位乘以50或100就是很大的記憶體數。
Nginx 0.8.46+PHP 5.2.14(FastCGI)伺服器在3萬併發連接下,開啟的10個Nginx進程消耗150M記憶體(15M*10=150M),開啟的64個php-cgi進程消耗1280M記憶體(20M*64= 1280M),加上系統自身消耗的記憶體,總共消耗不到2GB記憶體。 如果伺服器記憶體較小,完全可以只開啟25個php-cgi進程,這樣php-cgi消耗的總記憶體數才500M。