伺服器上w3wp.exe佔用cpu過多有時候超過50%的原因分析_win伺服器
最後更新:2017-01-19
來源:互聯網
上載者:User
解決CPU佔用過多:
1、在IIS中對每個網站進行單獨的應用程式集區配置。即互相之間不影響。
2、設定應用程式集區的CPU監視,不超過25%(伺服器為4CPU),每分鐘重新整理,超過限制時關閉。
根據w3wp取得是哪一個應用程式集區:
1、在工作管理員中增加顯示pid欄位。就可以看到佔用記憶體或者cpu最高的進程pid
2、在命令提示字元下運行iisapp -a。注意,第一次運行,會提示沒有js支援,點擊確定。然後再次運行就可以了。這樣就可以看到pid對應的應用程式集區。(iisapp實際上是存放在 C:windowssystem32目錄下的一個VBS指令碼,全名為iisapp.vbs,如果你和我一樣,也禁止了Vbs預設關聯程式,那麼就需要手動到該目錄,先擇開啟檔案,然後選“Microsoft (r) Windows Based Script. Host”來執行,就可以得到PID與應用程式集區的對應關係。)
3、到iis中察看該應用程式集區對應的網站,就ok了,做出上面的記憶體或CPU方面的限制,或檢查程式有無死迴圈之類的問題。
解決記憶體佔用過多,可以做以下配置:
1、在IIS中對每個網站進行單獨的應用程式集區配置。即互相之間不影響。
2、設定應用程式集區的回收時間,預設為1720小時,可以根據情況修改。再設定當記憶體佔用超過多少(如500M),就自動回收記憶體。
我的設定如下:
首先是對CPU的限制:在啟用cpu監視後,我設定該應用程式集區最大的cpu使用率為50%。設定重新整理cpu時間為1分鐘,設定作業為“關閉”。最大背景工作處理序數設定為1。這個意思是,IIS重新整理檢測該獨立池的CPU使用方式時間為1分鐘,如果超過設定的cpu限制50%,就會發出關閉池的指令,要求池在指定的時間內關閉。如果池成功在這個時間內關閉,IIS會重啟動一個新池,此段時間很短,一般不會有什麼感覺,池就重新開啟了,對於訪問網站的人基本是不會有感覺的。但如果池沒有在指定時間內關閉,IIS就會強行關閉它一個重新整理CPU時間。在這個停止的時間內,網站無法訪問,提示“Service Unavaliable”。
關閉時間和啟動時間間隔設定:設短一些比如10秒,這樣當您的網站程式大量佔用系統資源時IIS自動快速回收進程並且快速啟動進程,您的網站暫時還可以將就著工作。
對記憶體的限制及進程回收時間的設定:我設定為記憶體佔用超過800M就自動回收記憶體,虛擬記憶體沒有做限制。進程回收時間我保持預設沒有修改。各位可以根據自己的情況設定更短的時間。對應用程式集區最大虛擬記憶體也可以在此進行設定,超過了設定的最大虛擬記憶體,該池會就被回收。
最後綜合落伍wlmmc的一些經驗,總結一些需要注意的問題:
1、 要限制一個網站的CPU使用,必須將該網站設定為獨立應用程式集區,共用應用程式集區是無法限制單個網站的。IIS獨立應用程式集區,就需要獨立的進程,非常消耗記憶體。獨立池越多,就有越多的W3WP進程。對於每個網站均要獨立應用程式集區的伺服器,在一般的普通P43.0 2G記憶體的普通伺服器上,建議不要超過50個網站,最好30以內,不然伺服器壓力非常大。在配置上,我一般把資源消耗較大的網站獨立一個池,一般普通BBS或者產生HTML的系統大概5個站一個池。普通網站以及一些企業網站均共用一個池。
2、根據wlmmc的經驗,在伺服器硬體允許的情況下,一般不要限制網站記憶體使用量,這樣能夠保證網站運行,不會出現使用者掉線情況。需要限制某站的最大虛擬記憶體不要小於64M,不然可能出現一些未知的錯誤。
3、這些都不是根本解決辦法,它的根本問題是網站程式有問題,要解決根本問題還要從程式查起。根據本文開頭提到的方法查到具體的應用程式集區,找到使用此應用程式集區的網站,解決網站程式存在的問題,如死迴圈之類。
4、除了w3wp.exe, 在調用資料庫進行大量查詢操作的時候,也會大量佔用CPU資源,這是難免的(資料庫方面的語句及結構最佳化不在本文討論範圍之內)。個人認為,只要不是CPU長時間佔用100%, 一般在75%左右都是正常的。
伺服器正常運行CUP一般應該都在60%以下,有時候CUP出現上下波動很大,或者是伺服器突然很卡,或很慢.查看工作管理員,可以發現很多的w3wp.exe消耗CPU,結束後立即有新的w3wp.exe出現占CPU,管管理員在這種情況.只好重新啟動IIS服務,奇怪的是,重新啟動IIS服務後一切正常,但可能過了一段時間後,問題又再次出現了。
直接原因:
有一個或多個ACCESS資料庫在多次讀寫過程中損壞,微軟的MDAC系統在寫入這個損壞的ACCESS檔案時,ASP線程處於BLOCK狀態,結果其他線程只能等待,IIS被死結了,全部的CPU時間都消耗在w3wp.exe中。
解決辦法:1
在iis管理器裡面設定多個應用程式集區, 並把虛擬機器主機網站分別加入應用程式集區。在多應用程式集區的情況下,每個應用程式集區會對應產生一個w3wp.exe檔案。通過工作管理員可以查看到所有w3wp.exe佔用cpu利用率情況。 通過iis管理器開啟應用程式集區,可以逐個停掉應用程式集區。一邊停應用程式集區,一邊在工作管理員裡面觀察哪個w3wp.exe的cpu利用率一下子從降下來,cpu利用率恢複正常。這樣可以判斷是那個應用程式集區出了問題。然後可以再建立多個應用程式集區,每一個應用程式集區對應一個網站。這樣逐個停應用程式集區,就可以確定到底是哪個網站出問題。最有問題的往往是計數器類的ACCESS檔案,例如:“**COUNT.MDB” ,“*COUNT.ASP”,找到這個檔案後,可以刪除它,或下載下來,用ACCESS2000修複它,問題就解決。
解決辦法:2
w3wp.exe佔用cpu過高查詢方法,很多web供應商最頭疼的問題,在工作管理員經常出現w3wp.exe佔cup過高,導致整台伺服器受影響.解決辦法如下:
1.先把工作管理員開啟,發現那個w3wp.exe佔cup關高就結束進程
2.在我的電腦-管理-事件檢視器-系統-會找到關w3wp.exe的錯誤報表,把程式池名字記錄下,再把具體時間記錄下來.(如12.59.56).
3.在到系統上面的安全性.找到對應時間(如12.59.56)登陸過的使用者.
4.開啟iis找到2中查詢到的程式池,和3查詢到登陸過的使用者,取交集,即可精確查到是那個web占點站cup。