色综合图-色综合图片-色综合图片二区150p-色综合图区-玖玖国产精品视频-玖玖香蕉视频

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

服務(wù)器大量php-cgi.exe進(jìn)程導(dǎo)致CPU占用100%的解決方法

瀏覽:42日期:2023-02-28 17:21:16

windows 2003+IIS6中優(yōu)化fastcgi配置文件fcgiext.ini,減少php-cgi.exe進(jìn)程數(shù)量和所占內(nèi)存大小

本來(lái)聽說(shuō)fastcgi比isapi好就在服務(wù)器中裝上了,配置環(huán)境為windows 2003+IIS6+fastcgi(FCGI)+PHP5.2.17,經(jīng)過(guò)與很長(zhǎng)一段時(shí)間觀察,發(fā)現(xiàn)工作在FastCGI模式下的PHP會(huì)占用越來(lái)越多的內(nèi)存,訪問(wèn)量稍微多點(diǎn)php-cgi進(jìn)程就多了N個(gè),同樣情況下能比原來(lái)用isapi模式的時(shí)候多出幾百M(fèi),我的服務(wù)器內(nèi)存只有2G傷不起啊。

我在網(wǎng)上搜索了一下,發(fā)現(xiàn)還有不少人面臨同樣的問(wèn)題。來(lái)自PHP官方的一個(gè)比較正式的解釋是:php-cgi進(jìn)程并沒(méi)有內(nèi)存泄漏,php-cgi會(huì)在每個(gè)請(qǐng)求結(jié)束的時(shí)候回收腳本使用的全部?jī)?nèi)存,但是并不會(huì)釋放給操作系統(tǒng),而是繼續(xù)持有以應(yīng)對(duì)下一次PHP請(qǐng)求。這樣做大概是為了減少內(nèi)存碎片化或者解決從系統(tǒng)申請(qǐng)內(nèi)存之后又釋放回操作系統(tǒng)所需要的時(shí)間不可控問(wèn)題。可是如果偶然一次PHP請(qǐng)求使用了諸如ftp或者zlib這樣的大內(nèi)存操作,那么將導(dǎo)致一大塊系統(tǒng)內(nèi)存被php-cgi持續(xù)占有,不能被利用。
解決這個(gè)問(wèn)題的辦法是在web服務(wù)器配置中優(yōu)化fastcgi配置文件參數(shù)。

在C:\WINDOWS\system32\inetsrv\fcgiext.ini 文件中可以設(shè)定php-cgi進(jìn)程相關(guān)參數(shù),如:

[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 指定了每個(gè)實(shí)例可以處理的最大請(qǐng)求數(shù),
maxInstances 指定可以啟動(dòng)的最大實(shí)例數(shù)目,
EnvironmentVars 創(chuàng)建了一個(gè)環(huán)境變量 PHP_FCGI_MAX_REQUESTS ,默認(rèn)值設(shè)為10000,
requestTimeout 指定了請(qǐng)求的超時(shí)時(shí)間為600秒,
activityTimeout 指定了活動(dòng)會(huì)話超時(shí)時(shí)間為900秒。
一下是建議值:
maxInstances=
把這個(gè)值改小

建議

512M 內(nèi)存的改maxInstances=50
1G 內(nèi)存的改maxInstances=80
2G 內(nèi)存的改maxInstances=140

再修改
InstanceMaxRequests=
把這個(gè)值改小

建議

512M 內(nèi)存的改InstanceMaxRequests=200
1G 內(nèi)存的改InstanceMaxRequests=300
2G 內(nèi)存的改InstanceMaxRequests=500

改完, 重啟IIS。

instanceMaxRequests PHP_FCGI_MAX_REQUESTS 這兩個(gè)參數(shù)決定了一個(gè)php-cgi進(jìn)程被創(chuàng)建出來(lái)之后,最多接受的PHP請(qǐng)求數(shù),在lighttpd中默認(rèn)配置是10000。也就是說(shuō)這個(gè)php-cgi進(jìn)程每接受10000次PHP請(qǐng)求后會(huì)終止,釋放所有內(nèi)存,并重新被管理進(jìn)程啟動(dòng)。如果把它降低,比如改成100,那么php-cgi重啟的周期會(huì)大大縮短,偶然的高內(nèi)存操作造成的問(wèn)題影響時(shí)間也會(huì)縮短。
maxInstances 這個(gè)參數(shù)指定可以啟動(dòng)的最大實(shí)例數(shù)目,即php-cgi.exe進(jìn)程的數(shù)目。如果把它降低,比如改成100,那么在任務(wù)管理器的進(jìn)程中最多只有php-cgi.exe進(jìn)程,php-cgi.exe所占用的總內(nèi)存將大大減少。
我現(xiàn)在用的服務(wù)器為windows 2003操作系統(tǒng),4G內(nèi)存,一個(gè)php-cgi.exe程序占用7-25M內(nèi)存,我把maxInstances值調(diào)為300,減少了php-cgi.exe進(jìn)程的總數(shù)量,占用內(nèi)存也減小了,反應(yīng)速度比以前快了不少,至少調(diào)整到多少,可根據(jù)您的站點(diǎn)訪問(wèn)量來(lái)決定。

win2008服務(wù)器,fastCGI完美設(shè)置教程

在WIN2008的IIS7上使用FASTCGI調(diào)用PHP-CGI.EXE,默認(rèn)只有4個(gè)進(jìn)程,這樣對(duì)于大流量的網(wǎng)站為說(shuō),進(jìn)程數(shù)不足帶來(lái)的進(jìn)程排隊(duì)現(xiàn)象十分嚴(yán)重,解決方案如下。

32位系統(tǒng) http://www.iis.net/Downloads/files/AdminPack/TP2/AdminPack_x86.msi
64位系統(tǒng) http://www.iis.net/Downloads/files/AdminPack/TP2/AdminPack_amd64.msi

下載如下工具,安裝后,如下圖。



添加

PHP_FCGI_MAX_REQUESTS = 10000

添加后,不用重啟IIS,就能在進(jìn)程管理器看到效果。

似乎并沒(méi)有達(dá)到設(shè)定的值,不過(guò)瀏覽網(wǎng)站明顯感覺(jué)到性能的提示。

內(nèi)存占用~~ 其實(shí)微軟的系統(tǒng)有一個(gè)不好處在于, 服務(wù)器的內(nèi)存占用,要盡量讓服務(wù)去使用,而并不像客戶端使用一樣,留足夠多的內(nèi)存給用戶的應(yīng)用程序。

我在這里要提醒大家注意的是以下兩個(gè)參數(shù)值得設(shè)置:

InstanceMaxRequests:fastcgi進(jìn)程(php-fcgi.exe)能處理的最大請(qǐng)求數(shù),超過(guò)了就要回收,默認(rèn)是200

PHP_FCGI_MAX_REQUESTS:php自身控制的最大請(qǐng)求數(shù),默認(rèn)是500

既然要用fastcgi去運(yùn)行cgi,那肯定是不想php自身去限制最大請(qǐng)求數(shù)!!

所以,一定要保證InstanceMaxRequests小于 或 等于 PHP_FCGI_MAX_REQUESTS,這樣php自身永遠(yuǎn)沒(méi)有機(jī)會(huì)去回收進(jìn)程。

可以看micorsoft說(shuō)的:

Make sure that FastCGI always recycles Php-cgi.exe processes before native PHP recycling starts. The configuration property instanceMaxRequests controls the FastCGI process-recycling behavior. This property specifies how many requests FastCGI will process before recycling. PHP also has a similar process-recycling functionality that is controlled by the environment variable PHP_FCGI_MAX_REQUESTS. By setting instanceMaxRequests to a value that is smaller than or equal to PHP_FCGI_MAX_REQUESTS, you can make sure that the native PHP process-recycling logic will never start.

服務(wù)器php-cgi.exe進(jìn)程過(guò)多,導(dǎo)致CPU占用100%的解決方法

使用iis服務(wù)器中經(jīng)常會(huì)出現(xiàn)php-cgi.exe進(jìn)程過(guò)多,導(dǎo)致CPU占用100%,最終造成網(wǎng)站運(yùn)行過(guò)慢甚至卡死的情況,重啟iis會(huì)好一會(huì),過(guò)一段時(shí)間久出現(xiàn)這種情況,為什么會(huì)出現(xiàn)這種情況呢,應(yīng)該怎么解決呢,開始的時(shí)候我一直手動(dòng)結(jié)束php-cgi程序,雖然可以臨時(shí)解決問(wèn)題,但是不是長(zhǎng)久之計(jì),我百度了下,出現(xiàn)該問(wèn)題一般為程序方面問(wèn)題,如程序采用fastcgi方式運(yùn)行PHP,而程序設(shè)置的StartProcesses又偏大,如6甚至更大。下面是我整理的對(duì)php-cgi.ext過(guò)多引起服務(wù)器cup%的解決方法,希望對(duì)大家有幫助;大多數(shù)情況是發(fā)生在第四項(xiàng)上;

解決參考:

1.檢查系統(tǒng)盤空間。查看系統(tǒng)臨時(shí)文件是否過(guò)多,mysql數(shù)據(jù)庫(kù)的臨時(shí)文件默認(rèn)存到了c:/windows/temp,導(dǎo)致累積了幾萬(wàn)甚至上百萬(wàn)的小文件,壓垮系統(tǒng)盤。

del *.* 刪除所有文件

如果上面的命令不夠強(qiáng)悍,可以使用下面的代碼

del /f /q /s tmp\*.*

2.PHP是一種廣泛使用的動(dòng)態(tài)腳本語(yǔ)言,不過(guò)在IIS中并沒(méi)有內(nèi)置對(duì)PHP語(yǔ)言的支持,因此如果需要使用PHP,必須自行安裝。PHP可以安裝為CGI模式或者ISAPI模式,由于ISAPI模式具有更高的性能,因此我建議大家使用ISAPI模式。

3.如能修改程序,建議將程序配置文件中的StartProcesses值縮到2,看是否改善。

4.看是否服務(wù)器有問(wèn)題攻擊現(xiàn)象。

標(biāo)簽: Windows IIS
相關(guān)文章:
主站蜘蛛池模板: 亚洲美女视频在线 | 手机在线播放视频 | 四色6677最新永久网站 | 一本大道香蕉久在线不卡视频 | 高清偷自拍第1页 | 天堂视频免费看 | 久久久久久久久免费视频 | 996久久国产精品线观看 | 福利社在线 | 尹人香蕉久久99天天拍 | 国产一区二区三区在线观看免费 | 一级 黄 色 片免费 一级aaaaaa毛片免费 | 日本成年人视频网站 | 国产第一草草影院 | 特别福利视频在线观看 | 国产在线精品一区二区中文 | 成人黄激情免费视频 | 窝窝女人体国产午夜视频 | 国产免费一区二区三区在线 | 国产精品自拍亚洲 | 欧美三级日韩 | 成年视频国产免费观看 | 日本韩国一级毛片中文字幕 | 波多野结衣在线观看一区二区 | 国产一区日韩二区欧美三 | 欧美另类视频在线观看 | 国产成人成人一区二区 | 国产伦精品一区二区三区四区 | aaa免费看| 欧美成人免费观看bbb | 一个人免费观看日本www视频 | 成人午夜性视频欧美成人 | 日韩在线不卡一区在线观看 | 福利视频午夜 | 深夜福利国产福利视频 | 国产精品三 | 亚洲综合成人网 | 女人张开腿让男人桶视频免费大全 | 草草影院第一页yycccom | 国产精品大全 | 亚洲第一中文字幕 |