服務(wù)器上w3wp.exe占用cpu過多有時(shí)候超過50%的原因分析
1、在IIS中對(duì)每個(gè)網(wǎng)站進(jìn)行單獨(dú)的應(yīng)用程序池配置。即互相之間不影響。
2、設(shè)置應(yīng)用程序池的CPU監(jiān)視,不超過25%(服務(wù)器為4CPU),每分鐘刷新,超過限制時(shí)關(guān)閉。
根據(jù)w3wp取得是哪一個(gè)應(yīng)用程序池:
1、在任務(wù)管理器中增加顯示pid字段。就可以看到占用內(nèi)存或者cpu最高的進(jìn)程pid
2、在命令提示符下運(yùn)行iisapp -a。注意,第一次運(yùn)行,會(huì)提示沒有js支持,點(diǎn)擊確定。然后再次運(yùn)行就可以了。這樣就可以看到pid對(duì)應(yīng)的應(yīng)用程序池。(iisapp實(shí)際上是存放在 C:windowssystem32目錄下的一個(gè)VBS腳本,全名為iisapp.vbs,如果你和我一樣,也禁止了Vbs默認(rèn)關(guān)聯(lián)程序,那么就需要手動(dòng)到該目錄,先擇打開方式,然后選“Microsoft (r) Windows Based Script. Host”來執(zhí)行,就可以得到PID與應(yīng)用程序池的對(duì)應(yīng)關(guān)系。)
3、到iis中察看該應(yīng)用程序池對(duì)應(yīng)的網(wǎng)站,就ok了,做出上面的內(nèi)存或CPU方面的限制,或檢查程序有無死循環(huán)之類的問題。
解決內(nèi)存占用過多,可以做以下配置:
1、在IIS中對(duì)每個(gè)網(wǎng)站進(jìn)行單獨(dú)的應(yīng)用程序池配置。即互相之間不影響。
2、設(shè)置應(yīng)用程序池的回收時(shí)間,默認(rèn)為1720小時(shí),可以根據(jù)情況修改。再設(shè)置當(dāng)內(nèi)存占用超過多少(如500M),就自動(dòng)回收內(nèi)存。
我的設(shè)置如下:
首先是對(duì)CPU的限制:在啟用cpu監(jiān)視后,我設(shè)置該應(yīng)用程序池最大的cpu使用率為50%。設(shè)置刷新cpu時(shí)間為1分鐘,設(shè)置操作為“關(guān)閉”。最大工作進(jìn)程數(shù)設(shè)置為1。這個(gè)意思是,IIS刷新檢測(cè)該獨(dú)立池的CPU使用情況時(shí)間為1分鐘,如果超過設(shè)置的cpu限制50%,就會(huì)發(fā)出關(guān)閉池的指令,要求池在指定的時(shí)間內(nèi)關(guān)閉。如果池成功在這個(gè)時(shí)間內(nèi)關(guān)閉,IIS會(huì)重啟動(dòng)一個(gè)新池,此段時(shí)間很短,一般不會(huì)有什么感覺,池就重新開啟了,對(duì)于訪問網(wǎng)站的人基本是不會(huì)有感覺的。但如果池沒有在指定時(shí)間內(nèi)關(guān)閉,IIS就會(huì)強(qiáng)行關(guān)閉它一個(gè)刷新CPU時(shí)間。在這個(gè)停止的時(shí)間內(nèi),網(wǎng)站無法訪問,提示“Service Unavaliable”。
關(guān)閉時(shí)間和啟動(dòng)時(shí)間間隔設(shè)置:設(shè)短一些比如10秒,這樣當(dāng)您的網(wǎng)站程序大量占用系統(tǒng)資源時(shí)IIS自動(dòng)快速回收進(jìn)程并且快速啟動(dòng)進(jìn)程,您的網(wǎng)站暫時(shí)還可以將就著工作。
對(duì)內(nèi)存的限制及進(jìn)程回收時(shí)間的設(shè)置:我設(shè)置為內(nèi)存占用超過800M就自動(dòng)回收內(nèi)存,虛擬內(nèi)存沒有做限制。進(jìn)程回收時(shí)間我保持默認(rèn)沒有修改。各位可以根據(jù)自己的情況設(shè)置更短的時(shí)間。對(duì)應(yīng)用程序池最大虛擬內(nèi)存也可以在此進(jìn)行設(shè)置,超過了設(shè)置的最大虛擬內(nèi)存,該池會(huì)就被回收。
最后綜合落伍wlmmc的一些經(jīng)驗(yàn),總結(jié)一些需要注意的問題:
1、 要限制一個(gè)站點(diǎn)的CPU使用,必須將該站點(diǎn)設(shè)置為獨(dú)立應(yīng)用程序池,共用應(yīng)用程序池是無法限制單個(gè)站點(diǎn)的。IIS獨(dú)立應(yīng)用程序池,就需要獨(dú)立的進(jìn)程,非常消耗內(nèi)存。獨(dú)立池越多,就有越多的W3WP進(jìn)程。對(duì)于每個(gè)站點(diǎn)均要獨(dú)立應(yīng)用程序池的服務(wù)器,在一般的普通P43.0 2G內(nèi)存的普通服務(wù)器上,建議不要超過50個(gè)站點(diǎn),最好30以內(nèi),不然服務(wù)器壓力非常大。在配置上,我一般把資源消耗較大的網(wǎng)站獨(dú)立一個(gè)池,一般普通BBS或者生成HTML的系統(tǒng)大概5個(gè)站一個(gè)池。普通網(wǎng)站以及一些企業(yè)站點(diǎn)均共用一個(gè)池。
2、根據(jù)wlmmc的經(jīng)驗(yàn),在服務(wù)器硬件允許的情況下,一般不要限制站點(diǎn)內(nèi)存使用,這樣能夠保證網(wǎng)站運(yùn)行,不會(huì)出現(xiàn)用戶掉線情況。需要限制某站的最大虛擬內(nèi)存不要小于64M,不然可能出現(xiàn)一些未知的錯(cuò)誤。
3、這些都不是根本解決辦法,它的根本問題是網(wǎng)站程序有問題,要解決根本問題還要從程序查起。根據(jù)本文開頭提到的方法查到具體的應(yīng)用程序池,找到使用此應(yīng)用程序池的網(wǎng)站,解決網(wǎng)站程序存在的問題,如死循環(huán)之類。
4、除了w3wp.exe, 在調(diào)用數(shù)據(jù)庫進(jìn)行大量查詢操作的時(shí)候,也會(huì)大量占用CPU資源,這是難免的(數(shù)據(jù)庫方面的語句及結(jié)構(gòu)優(yōu)化不在本文討論范圍之內(nèi))。個(gè)人認(rèn)為,只要不是CPU長(zhǎng)時(shí)間占用100%, 一般在75%左右都是正常的。
服務(wù)器正常運(yùn)行CUP一般應(yīng)該都在60%以下,有時(shí)候CUP出現(xiàn)上下波動(dòng)很大,或者是服務(wù)器突然很卡,或很慢.查看任務(wù)管理器,可以發(fā)現(xiàn)很多的w3wp.exe消耗CPU,結(jié)束后立即有新的w3wp.exe出現(xiàn)占CPU,管管理員在這種情況.只好重新啟動(dòng)IIS服務(wù),奇怪的是,重新啟動(dòng)IIS服務(wù)后一切正常,但可能過了一段時(shí)間后,問題又再次出現(xiàn)了。
直接原因:
有一個(gè)或多個(gè)ACCESS數(shù)據(jù)庫在多次讀寫過程中損壞,微軟的MDAC系統(tǒng)在寫入這個(gè)損壞的ACCESS文件時(shí),ASP線程處于BLOCK狀態(tài),結(jié)果其他線程只能等待,IIS被死鎖了,全部的CPU時(shí)間都消耗在w3wp.exe中。
解決辦法:1
在iis管理器里面設(shè)置多個(gè)應(yīng)用程序池, 并把虛擬主機(jī)站點(diǎn)分別加入應(yīng)用程序池。在多應(yīng)用程序池的情況下,每個(gè)應(yīng)用程序池會(huì)對(duì)應(yīng)生成一個(gè)w3wp.exe文件。通過任務(wù)管理器可以查看到所有w3wp.exe占用cpu利用率情況。 通過iis管理器打開應(yīng)用程序池,可以逐個(gè)停掉應(yīng)用程序池。一邊停應(yīng)用程序池,一邊在任務(wù)管理器里面觀察哪個(gè)w3wp.exe的cpu利用率一下子從降下來,cpu利用率恢復(fù)正常。這樣可以判斷是那個(gè)應(yīng)用程序池出了問題。然后可以再建立多個(gè)應(yīng)用程序池,每一個(gè)應(yīng)用程序池對(duì)應(yīng)一個(gè)站點(diǎn)。這樣逐個(gè)停應(yīng)用程序池,就可以確定到底是哪個(gè)網(wǎng)站出問題。最有問題的往往是計(jì)數(shù)器類的ACCESS文件,例如:“**COUNT.MDB” ,“*COUNT.ASP”,找到這個(gè)文件后,可以刪除它,或下載下來,用ACCESS2000修復(fù)它,問題就解決。
解決辦法:2
w3wp.exe占用cpu過高查詢方法,很多web提供商最頭疼的問題,在任務(wù)管理器經(jīng)常出現(xiàn)w3wp.exe占cup過高,導(dǎo)致整臺(tái)服務(wù)器受影響.解決辦法如下:
1.先把任務(wù)管理器打開,發(fā)現(xiàn)那個(gè)w3wp.exe占cup關(guān)高就結(jié)束進(jìn)程
2.在我的電腦-管理-事件查看器-系統(tǒng)-會(huì)找到關(guān)w3wp.exe的錯(cuò)誤報(bào)告,把程序池名字記錄下,再把具體時(shí)間記錄下來.(如12.59.56).
3.在到系統(tǒng)上面的安全性.找到對(duì)應(yīng)時(shí)間(如12.59.56)登陸過的用戶.
4.打開iis找到2中查詢到的程序池,和3查詢到登陸過的用戶,取交集,即可精確查到是那個(gè)web占點(diǎn)站cup。
相關(guān)文章
win2008 R2 下 IIS7.5+PHP5.2.17+Mysql5.5.16+Zend3.3.3
windows Server 2008 R2 下面IIS7.5已經(jīng)對(duì)fastcgi的支持有了很大改進(jìn),還在使用PHP-ISAPi模式的朋友可以試一下2013-06-06服務(wù)器安全設(shè)置_系統(tǒng)端口安全配置
下面先是介紹關(guān)于端口的一些基礎(chǔ)知識(shí),主要是便于我們下一步的安全配置打下基礎(chǔ),如果 你對(duì)端口方面已經(jīng)有較深了解可以略過這一步。2008-07-07WIN2008系統(tǒng)安裝IIS7配過ASP后打開ASP網(wǎng)站為500錯(cuò)誤的解決辦法
今天幫一客戶解決WIN2008上網(wǎng)站打不開報(bào)500錯(cuò)誤,糾結(jié)了幾個(gè)小時(shí)后終于解決,現(xiàn)把經(jīng)驗(yàn)記錄一下2013-03-03Windows7 apache啟動(dòng)失敗的解決方法
Windows7啟動(dòng)apache失敗了,大家可以參考下下面的方法,看看。2009-07-07win server 2019服務(wù)器的iis配置以及網(wǎng)站的簡(jiǎn)單發(fā)布
這篇文章主要介紹了win server 2019服務(wù)器的iis配置以及網(wǎng)站的簡(jiǎn)單發(fā)布,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-02-02Windows Server 2016快速入門部署遠(yuǎn)程桌面服務(wù)的詳細(xì)圖文步驟
這篇文章主要介紹了Windows Server 2016快速入門部署遠(yuǎn)程桌面服務(wù)的詳細(xì)圖文步驟,需要的朋友可以參考下2021-01-01windows server 2008R2系統(tǒng) IIS7.5配置偽靜態(tài)的方法(urlrewrite)
這篇文章主要介紹了windows server 2008R2系統(tǒng) IIS7.5配置偽靜態(tài)頁面 ,需要的朋友可以參考下2016-06-06win2003服務(wù)器中創(chuàng)建Web網(wǎng)站虛擬目錄的圖文方法
Windows Server 2003系統(tǒng)中創(chuàng)建的Web網(wǎng)站,其中的所有內(nèi)容一般都存儲(chǔ)在主目錄中。但隨著網(wǎng)站內(nèi)容的不斷豐富,用戶需要把不同層次的內(nèi)容組織成網(wǎng)站主目錄下的子目錄。2010-10-10