如何解決php cgi.exe 太多的問題

2020-10-12 12:00:58

php cgi.exe太多的解決辦法:首先檢查系統磁碟空間;然後將PHP安裝為CGI模式或者ISAPI模式;接著修改程式;最後在web伺服器設定中優化fastcgi組態檔引數即可。

推薦:《》

伺服器大量php-cgi.exe程序,導致CPU佔用100%的解決

出現該問題一般為程式方面問題,如程式採用fastcgi方式執行PHP,而程式設定的StartProcesses又偏大,如6甚至更大。

解決參考:

1.檢查系統磁碟空間。檢視系統臨時檔案是否過多,MySQL資料庫的臨時檔案預設存到了c:/windows/temp,導致累積了幾萬甚至上百萬的小檔案,壓垮系統磁碟。

del *.* 刪除所有檔案

2.PHP是一種廣泛使用的動態指令碼語言,不過在IIS中並沒有內建對PHP語言的支援,因此如果需要使用PHP,必須自行安裝。PHP可以安裝為CGI模式或者ISAPI模式,由於ISAPI模式具有更高的效能,因此我建議大家使用ISAPI模式。

3.如能修改程式,建議將程式組態檔中的StartProcesses值縮到2,看是否改善。

4.看是否伺服器有問題攻擊現象。

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程序的總數量,佔用記憶體也減小了,反應速度比以前快了不少,至少調整到多少,可根據您的站點存取量來決定。

以上就是如何解決php cgi.exe 太多的問題的詳細內容,更多請關注TW511.COM其它相關文章!