w3wp.exe是在IIS(網際網路資訊服務器)與應用程式集區相關聯的一個進程,如果你有多個應用程式集區,就會有對應的多個w3wp.exe的進程執行個體運行。這個進程用來分配大量的系統資
今天研究了一下,可以做以下配置:
1、在IIS中對每個網站進行單獨的應用程式集區配置。即互相之間不影響。
2、設定應用程式集區的回收時間,預設為1720小時,可以根據情況修改。同時,設定同時啟動並執行w3wp進程數目為1。再設定當記憶體或者cpu佔用超過多少,就自動回收記憶體
一般來說,這樣就可以解決了。但仍然會出現個別網站因為程式問題,不能正確釋放。
那麼,怎麼樣才能找到是哪一個網站的?
1、在工作管理員中增加顯示pid欄位。就可以看到佔用記憶體或者cpu最高的進程pid
2、在命令提示字元下運行iisapp -a。注意,第一次運行,會提示沒有js支援,點擊確定。然後再次運行就可以了。這樣就可以看到pid對應的應用程式集區
3、到iis中察看該應用程式集區對應的網站,就ok了。
最近公司伺服器總出現CPU100%佔用情況,伺服器配置為雙核Xeon3.0×2,2G ECC記憶體。
發現是w3wp.exe長時間佔用大量CPU.出現這種情況應該是網站程式存在死迴圈等問題所致。
在找到問題以前可以暫時採取限制w3wp進程CPU使用率的方法保證網站可以將就著工作:
在IIS6下,經常出現w3wp.exe的記憶體及CPU佔用不能及時釋放,從而導致伺服器響應速度很慢。
解決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就自動回收記憶體,虛擬記憶體沒有做限制。進程回收時間我保持預設沒有修改。各位可以根據自己的情況設定更短的時間。對應用程式集區最大虛擬記憶體也可以在此進行設定,超過了設定的最大虛擬記憶體,該池會就被回收。