W3wp.exe占用CPU及內存資源
問題背景
最近使用一款系統,但是經常出現卡頓或者用戶賬號登錄不了系統。後來將問題定位在了服務器中的“w3wp.exe”這個進程。在我們的用戶對系統進行查詢、修改等操作後,該進程占用大量的CPU以及內存資源,導致服務器運行緩慢,用戶也是怨聲載道。曾經嘗試結束掉這個進程,但是沒多久這個進程又“不知廉恥”的占用大量的CPU和內存。我是個懶惰的人,實在難以想象每次都需要到服務器中結束這個進程,所以想個解決辦法一勞永逸!
W3wp.exe簡介
下面是百度百科上的介紹:
w3wp.exe是在IIS(因特網信息服務器)與應用程序池相關聯的一個進程,如果你有多個應用程序池,就會有對應的多個w3wp.exe的進程實例運行。這個進程用來分配大量的系統資源。
常見問題
由於我們的服務器空間是剛劃分出來的,發布了一個WEB站點,也就三兩個用戶在使用系統。所以初步斷定是由於網站程序引起的。但是依然將常見的問題一一列舉出來,以備不測。
- 網站程序的死循環或大量運算引起進程占用大量系統資源
- 服務器資源沒有自動釋放
- 緩存文件資源引起的程序越來越慢
- WEB站點訪問量大
解決方案
1. 檢查WEB站點。結束掉“W3wp.exe”進程,治標不治本,並不能從根本上解決問題。所以我們先要確定網站的應用程序池,查找到對應的網站檢查網站程序。事實上如果你發布的WEB站點只有一個,那麽就可以省去查找占用系統資源最高的PID進程對應的WEB站點了。但是通常情況下並不是這樣的,所以把下面的解決方案貼上來。當然,在運行命令提示符“iisapp -a”的時候,如果系統沒有任何提示,在“C:\windows\system32”中檢查是否缺少這個腳本。
- 在IIS中對每個網站進行單獨的應用程序池配置。即互相之間不影響。
- 設置應用程序池的CPU監視,不超過25%(服務器為4CPU),每分鐘刷新,超過限制時關閉。
- 根據w3wp取得是哪一個應用程序池。
在任務管理器中點擊“查看--選擇列”增加顯示pid字段。就可以看到占用內存或者cpu最高的進程pid 在命令提示符下運行iisapp -a。註意,第一次運行,會提示沒有js支持,點擊確定。然後再次運行就可以了。這樣就可以看到pid對應的應用程序池。(iisapp實際上是存放在C:\windows\system32目錄下的一個VBS腳本,全名為iisapp.vbs,如果你和我一樣,也禁止了Vbs默認關聯程序,那麽就需要手動到該目錄,先擇打開方式,然後選“Microsoft (r) Windows Based Script Host”來執行,就可以得到PID與應用程序池的對應關系。) 到iis中察看該應用程序池對應的網站,就ok了,做出上面的內存或CPU方面的限制,或檢查程序有無死循環之類的問題。
2. 設置CPU監視。在設置CPU監視時,看到網上的許多資料都是IIS6的。所以請先註意下自己IIS的版本。例如我的版本是IIS7。右擊WEB站點對應的應用程序池,選擇“高級設置”。圖示中若設置“已啟用處理其關聯=true”,那麽服務器會在每隔一分鐘監視一次CPU。若果超過95%的利用率,那麽就會關閉掉“W3wp.exe”進程。完美解決我的問題,但是從網上對IIS7的各種分析來說,服務器監測關閉掉進程後經常不會重新啟動新進程,必須手動重啟。如果占用內存過多可以在對下面的“回收”進行設置。
3. 清理緩存文件。服務器長時間運行後沒有定時清理緩存文件也有可能造成程序運行越來越慢。可以通過打開“c:\windows\temp\”目錄,清空裏面的緩存文件。或者直接通過cmd命令符”輸入“ del c:\windows\temp*.* /s /q”。
W3wp.exe占用CPU及內存資源