FastCGI優化配置文件fcgiext.ini,它在%windir%\system32\inetsrv裏。我們將嘗試用兩種辦法進行配置:FastCGI管理腳本fcgiconfig.js;記事本編輯fcgiext.ini。
腳本配置FastCGI
打開妳的命令行cmd.exe,切換到目錄 %windir%\system32\inetsrv。復制下面內容,回車執行以下即可完成。請根據需要設置後面的參數。
1 cscript fcgiconfig.js -set -section:"PHP" -InstanceMaxRequests:5000
2
3 cscript fcgiconfig.js -set -section:"PHP" -EnvironmentVars:PHP_FCGI_MAX_REQUESTS:5000
4
5 cscript fcgiconfig.js -set -section:"PHP" -RequestTimeout:360
6
7 cscript fcgiconfig.js -set -section:"PHP" -ActivityTimeout:120
腳本的含義,分別是:
設置應用程序池回收。FastCGI進程請求數達到InstanceMaxRequests數值5000,應用程序池將自動回收。默認值是1000。
當環境變量PHP_FCGI_MAX_REQUESTS達到10000將自動回收應用程序池。
RequestTimeout 設置請求超時時間,也就是請求允許的最大時間,如果FastCGI進程請求超過此設置將被禁止,值是90秒。
ActivityTimeout 指定FastCGI進程請求的最大活躍時間,在設定時間內,FastCGI進程和IIS沒有通信,將終止進程。默認值是70秒。
註意:腳本命令是全局設置,針對服務器上所有以FastCGI運行的PHP網站。因此對於多站點的虛擬機來說,InstanceMaxRequests設置成PHP網站數X500相對理想。
500是變數。如果有10個網站,那麽200X50=5000,類推。流量大的服務器,數值設置過小頻繁回收應用程序池,並不是什麽明智的做法。——雖然,系統回收了不少資源。
RequestTimeout數值過大,無疑將讓更多消耗系統資源的請求運行;ActivityTimeout設置為120秒不活動就斷開好,還是30秒不活動就斷開好,因人而異。
復制粘貼適合懶人
FastCGI配置文件fcgiext.ini設置
InstanceMaxRequests=10000
EnvironmentVars=PHP_FCGI_MAX_REQUESTS:10000
RequestTimeout=360
ActivityTimeout=120
把上面代碼復制到fcgiext.ini的末尾,保存就好了。
PHP5.3.6的優化配置
PHP5.3.6的php.ini配置也分為兩部分:關於FastCGI的配置;關於PHP本身的配置。我的PHP5.3.6安裝在C:\PHP。
PHP.ini關於FastCGI部分
fastcgi.impersonate = 1
cgi.fix_pathinfo=1
cgi.force_redirect = 0
PHP.ini關於自身的部分
壹、搜索extension_dir,去掉前面註釋逗;地,修改成:
1 extension_dir = "c:/php/ext"
二、搜索date.timezone,去掉前面註釋逗;地,修改成:
1 date.timezone = "asia/shanghai"
三、搜索下面,然後去掉前面的註視逗;地
extension=php_gd2.dll
extension=php_mbstring.dll
extension=php_mysql.dll
如此這般妳的PHP基本可以暢通無阻了。至於壹些更高級的修改,我們沒有必要研究那麽深,不是嗎?
windows 2003+IIS6中優化fastcgi配置文件fcgiext.ini,減少php-cgi.exe進程數量和所占內存大小
本來聽說fastcgi比isapi好就在服務器中裝上了,配置環境為windows 2003+IIS6+fastcgi(FCGI)+PHP5.2.17,經過與很長壹段時間觀察,發現工作在FastCGI模式下的PHP會占用越來越多的內存,訪問量稍微多點php-cgi進程就多了N個,同樣情況下能比原來用isapi模式的時候多出幾百M,我的服務器內存只有2G傷不起啊。
我在網上搜索了壹下,發現還有不少人面臨同樣的問題。來自PHP官方的壹個比較正式的解釋是:php-cgi進程並沒有內存泄漏,php-cgi會在每個請求結束的時候回收腳本使用的全部內存,但是並不會釋放給操作系統,而是繼續持有以應對下壹次PHP請求。這樣做大概是為了減少內存碎片化或者解決從系統申請內存之後又釋放回操作系統所需要的時間不可控問題。可是如果偶然壹次PHP請求使用了諸如ftp或者zlib這樣的大內存操作,那麽將導致壹大塊系統內存被php-cgi持續占有,不能被利用。
解決這個問題的辦法是在web服務器配置中優化fastcgi配置文件參數。
在C:\WINDOWS\system32\inetsrv\fcgiext.ini 文件中可以設定php-cgi進程相關參數,如:
[Types]
php = PHP
[PHP]
ExePath=C:\php-5.3.8-nts-Win32-VC9-x86\php-cgi.exe
maxInstances=100
InstanceMaxRequests=10000
EnvironmentVars=PHP_FCGI_MAX_REQUESTS:10000
RequestTimeout=600
ActivityTimeout=900
在上面的配置中:
ExePath 指定了FastCGI解析程序的路徑,
instanceMaxRequests 指定了每個實例可以處理的最大請求數,
maxInstances 指定可以啟動的最大實例數目,
EnvironmentVars 創建了壹個環境變量 PHP_FCGI_MAX_REQUESTS ,默認值設為10000,
requestTimeout 指定了請求的超時時間為600秒,
activityTimeout 指定了活動會話超時時間為900秒。
壹下是建議值:
maxInstances=
把這個值改小
建議
512M 內存的改maxInstances=50
1G 內存的改maxInstances=80
2G 內存的改maxInstances=140
再修改
InstanceMaxRequests=
把這個值改小
建議
512M 內存的改InstanceMaxRequests=200
1G 內存的改InstanceMaxRequests=300
2G 內存的改InstanceMaxRequests=500
改完, 重啟IIS。
instanceMaxRequests PHP_FCGI_MAX_REQUESTS 這兩個參數決定了壹個php-cgi進程被創建出來之後,最多接受的PHP請求數,在lighttpd中默認配置是10000。也就是說這個php-cgi進程每接受10000次PHP請求後會終止,釋放所有內存,並重新被管理進程啟動。如果把它降低,比如改成100,那麽php-cgi重啟的周期會大大縮短,偶然的高內存操作造成的問題影響時間也會縮短。
maxInstances 這個參數指定可以啟動的最大實例數目,即php-cgi.exe進程的數目。如果把它降低,比如改成100,那麽在任務管理器的進程中最多只有php-cgi.exe進程,php-cgi.exe所占用的總內存將大大減少。
我現在用的服務器為windows 2003操作系統,4G內存,壹個php-cgi.exe程序占用7-25M內存,我把maxInstances值調為300,減少了php-cgi.exe進程的總數量,占用內存也減小了,反應速度比以前快了不少,至少調整到多少,可根據您的站點訪問量來決定。