首頁  >  文章  >  後端開發  >  如何解決php cgi.exe 太多的問題

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

藏色散人
藏色散人原創
2020-10-12 10:04:322794瀏覽

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

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

推薦:《PHP視訊教學》 

伺服器大量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 太多的問題的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn