目前網上最全的W3WP.EXE佔用內存及CPU處理方法

w3wp.exe佔用內存過高的問題  


 

今天下午服務器突然不能訪問,通知機房重啓後恢復。懷疑是網站asp程序的問題

在IIS6下,經常出現w3wp的內存佔用不能及時釋 放,從而導致服務器響應速度很慢。由於內存釋放不及時嚴重影響到服務器的正常運營,建議採用以下配置,但請考慮自身服務器的使用情況。

  可以做以下配置:
  1、在IIS中對每個網站進行單獨的應用程序池配置。即互相之間不影響。(進程池越多越佔用內存,由於訪問網站之後往往不會立即釋放內存資源。)
  2、設置應用程序池的回收時間,默認爲1720小時,可以根據情況修改。同時,設置同時運行的w3wp進程數目爲1。再設置當內存或者cpu佔用超過多少,就自動回收內存 。
   3、設置固定時間加收進程,比如在凌晨1:00至9:00之前訪問人數都比較少,影響很少小,可以設定每天在這個時間段內進行內存回收,以減少服務器因 爲內存不足帶來的影響。設定固定的時間在IIS6中沒有限制次數,可以根據實際情況來設定時間比如:晚上12:00,8:00,12:30,6:30等時 間段時間有效的進程池資源回收。
  一般來說,這樣就可以解決了。但仍然會出現個別網站因爲程序問題,不能正確釋放。
  那麼,怎麼樣才能找到是哪一個網站的?
  1、在任務管理器中增加顯示pid字段。就可以看到佔用內存或者cpu最高的進程pid
  2、在命令提示符下運行iisapp -a。注意,第一次運行,會提示沒有js支持,點擊確定。然後再次運行就可以了。這樣就可以看到pid對應的應用程序池
  3、到iis中察看該應用程序池對應的網站,就ok了。Windows Server 2003中的w3wp.exe進程大量佔用cpu資源的各種問題解決方法2007-04-
   24 14:43這幾天服務器總是運行緩慢,遠程登錄後發現一個w3wp.exe的進程佔用了100%cpu在Windows   Server   2003中對於每一個Web應用,IIS   6.0都用一個獨立的w3wp.exe的實例來運行它。w3wp.exe也稱爲工作進程(每一個主機頭都會有一個)直接在任務管理器中結束進程是不起作用 的,結束後不久它會執行啓動,要想結束它可
  以在IIS中找到相應的應用程序池停止相應的應用程序池工作。
  這些都不是解決辦法,它 的根本問題是你的那個網站程序有問題,在找到問題以前可以先打開IIS找到應用程序池先用右鍵屬性中設置“性能”把其中的CPU設成大於60%關閉應用程 序池,把關閉時間和開啓時間設短一些比如10秒,這樣當您的網站程序大量佔用系統資源時IIS自動快速回收進程並且快速啓動進程,您的網站暫時還可以將就 着工作。要解決根本問題還要從程序查起,您可以在IIS中的應用程序池中右鍵創建多個應用程序池,然後在每個主機頭中的文件家選項的底部將應用程序池對應 道剛纔建好的應用程序池,然後一個一個關閉在任務管理器中看看是哪個程序佔用的資源較大。
  下面是一些網友的相關貼子也許對大家有幫助
  朋友的WEB服務器一直運行正常,但這幾天CPU佔用率一直將近100%,遂去看個究竟。 服務器採用Windows   2003,   網站使用ASP+Access數據庫,   查看進程列表發現w3wp.exe   佔用了70%以上的CPU,
   查看WEB日誌,站點訪問量不大,查看TCP連接也不多。用net   stop   w3svc停掉WEB服務,CPU佔用立即正常,net   start   w3svc啓動WEB後不久現象又出來了。停止所有虛擬站點,新建一個虛擬站點發現並沒有問題,懷疑是站點本身的代碼問題。
  檢查首頁代碼,大致是如下結構:
  粗看一下並沒有問題,但就是這段代碼造成了w3wp.exe佔用大量CPU,難道是死循環?似乎沒有理由。在循環體內加入計數,發現確實是死循環,說明RS.EOF一直爲false,加入
  如下代碼:
  if   RS.EOF   =   true   then   Response.Write   "EOF   is   true"
  if   RS.EOF   =   false   then   Response.Write   "EOF   is   false"
  發現輸出竟然是EOF   is   true   EOF   is   false,   說明無法判斷RS.EOF的值,
  爲何如此百思不得其解。檢查數據庫,發現庫中並沒有mytable表,   如果該表不存在,RS.Open   "Select   *   FROM   mytable",   conn   就會出錯,爲何沒有出錯,很
  有可能捕獲的異常被忽略了。
  檢查包含文件conn.asp,   發現了異常處理代碼:
  On   Error   Resume   Next
  原來問題在此。On   Error   Resume   Next忽略了查詢表時的失敗以及後續的錯誤,造成進入死循環。
  那爲何網站本來運行正常,現在卻找不到mytable表了呢?仔細檢查網站才發現“有‘客’自遠方來”,上傳了後門工具、刪除了多張數據表,害我忙活了一天。
  查找更詳細的安全設置
  windows2003   iis6.0假死問題解決
  這幾天服務器總是運行緩慢,遠程登錄後發現一個w3wp.exe的進程佔用了100%   cpu。
  問題的原因最終找到兩個:
  1.採用的jet   數據庫連接方式存在問題:http://support.microsoft.com/?id=838306
  補丁下載:
  chs:WindowsServer2003-KB838306-x86-chs.exe
  enu:WindowsServer2003-KB838306-x86-enu.exe
  2.將access數據庫擴展名改爲asp
  下面是我的差錯過程和解決方案:
   搜索一下發現類似問題還真不少,那個w3wp的進程是iis6.0的應用程序池,網上的說法有兩種,一是因爲asp或者asp.net代碼中含有死循環 引起的。但是服務器上這麼多網站,誰知道那個網站出了問題。二是由於上面的jet連接數據庫方式的bug引起的,下載838306的補丁,或者升級到 sp1可以解決這個問題,但是打了這個補丁後,有些網站的問題依然存在。
  又去搜索,有人說將每個網站建立獨立的應用程序池,應用程序池的安全性帳戶設爲本地服務即可。方法如下:
  首先新建應用程序池:
  然後將網站的應用程序池指向剛纔建立的應用程序池:
  在建立完所有應用程序池後,統一修改應用程序池的屬性:
  將應用程序池安全帳戶指定爲本地服務:
  設置完這些之後,問題依然存在,這樣一個網站出現問題,不致影響其他網站,但是這個網站仍然佔用大量資源,導致其它網站響應緩慢。不過在任務管理器中出現了每個應用程序池的進程,因此可以找到具體出問題的進程了。
   下面是尋找出錯網站的過程:要找到這個網站,必須把有問題的進程跟該網站的應用程序池聯繫起來。首先設置任務管理器的查看方式,加入PID的顯示:然後 再命令行運行iisapp   -a,可以看到PID跟應用程序池的對應關係:再去iis中看該應用程序池對應的網站,有問題的網站就找到了,剩下的就是這個網站代碼中的問題了。
  在某位網站管理員的糾纏不休下,我終於無法忍受,幫他找錯誤-   -   無數次配置iis,網站程序也換了,該升級的也升級了,問題還是存在,黔驢技窮,把網站下載到本地
  看看到底怎麼回事。當我試圖打開他的數據庫的時候,問題出現了:
  他的數據庫是.asp的擴展名,要先修改爲.mdb才能打開,但是當我點擊要改名字的時候,我的電腦沒有響應了~!看來問題在這個數據庫了。
  用命令行rename之後,打開數據庫,修復,似乎沒有任何問題,但是再改爲.asp時,又出現了剛纔的問題。哈~原來是.asp的擴展名在作怪。
  但是我試着將其他的數據庫改爲.asp,沒有問題。根本原因不得而知,望知情者告知。
   最後,在iis中隨便添加了一個isapi對應到mdb,造成mdb無法執行,防止下載,將所有的.asp的數據庫改回.mdb,問題解 (轉)Windows Server 2003中的w3wp.exe進程大量佔用cpu資源的各種問題解決方法 1:使用 MicrosoftJet 數據庫引擎 Web 應用程序可能停止響應負載,造成假死:
  原因:發生此問題是因爲 Jet 數據庫引擎中存在缺陷。 Microsoft Windows Server 2003 上只會出現此問題。 在 Windows Server 2003, COM+ 更改頻率 CoFreeUnusedLibraries 函數被調用。 此更改導致 Jet 驅動程序以初始化頻繁。 此行爲可能導致死鎖條件。
  Web 服務器負載時最常出現此問題。
  補丁下載:
  chs:WindowsServer2003-KB838306-x86-chs.exe
  enu:WindowsServer2003-KB838306-x86-enu.exe
  在IIS6下,經常出現w3wp.exe的內存及CPU佔用不能及時釋放,從而導致服務器響應速度很慢。
  解決內存佔用過多,可以做以下配置:
  1、在IIS中對每個網站進行單獨的應用程序池配置。即互相之間不影響。
  2、設置應用程序池的回收時間,默認爲1720小時,可以根據情況修改。再設置當內存佔用超過多少(如500M),就自動回收內存。
  解決CPU佔用過多:
  1、在IIS中對每個網站進行單獨的應用程序池配置。即互相之間不影響。
  2、設置應用程序池的CPU監視,不超過25%(服務器爲4CPU),每分鐘刷新,超過限制時關閉。
  根據w3wp取得是那個一個應用程序池:
  1、在任務管理器中增加顯示pid字段。就可以看到佔用內存或者cpu最高的進程pid
   2、在命令提示符下運行iisapp -a。注意,第一次運行,會提示沒有js支持,點擊確定。然後再次運行就可以了。這樣就可以看到pid對應的應用程序池。(iisapp實際上是存放在 C:\windows\system32目錄下的一個VBS腳本,全名爲iisapp.vbs,如果你和我一樣,也禁止了Vbs默認關聯程序,那麼就需要 手動到該目錄,先擇打開方式,然後選“Microsoft (r) Windows Based Script Host”來執行,就可以得到PID與應用程序池的對應關係。)
  3、到iis中察看該應用程序池對應的網站,就ok了,做出上面的內存或CPU方面的限制,或檢查程序有無死循環之類的問題。
  QUOTE:
  環境:win2003server+IIs+ASP+MSSQL
  現象:每隔一段時間(不定,有時幾分鐘,有時半小時)出現一次網站打開非常緩慢,甚至有時會出現超時打不開站點,此時查看服務器端的進程,CPU佔用率達到100%,其中w3wp佔用70~80%,SQL佔用20~30%。所有服務器端的操作也變得緩慢。
   初期解決方法:每次現象出現時,立即登錄服務器直接結束w3wp進程或重啓IIS服務,平均每天約十次操作,由於服務器存放於遠程機房,所有操作都是遠 程控制進行,有時會因此出現遠程無法連接登錄的情況,只能通過電話通知機房管理人員重啓服務器解決,此過程導致用戶抱怨不斷。
  經過網上查閱資料,發現此類現象多數由於網頁代碼不合理所致,以下情況會導致此類現象發生:
  1、代碼中多處使用application、seesion等服務器緩存,導致服務器資料過度佔用;
  2、代碼有不合理語法,死循環等;
  3、數據庫損壞,尤其是ACCESS數據庫;
  4、裝過多第三方軟件或插件,與IIS或網頁功能代碼衝突。
  第一階段排查:根據查閱到的參考資料逐項分析
  1、服務器上所有站點代碼均爲公司設計人員自行編寫,可證實並無過多調用服務器緩存語法(排除)
  2、代碼是否存在不合理語法(不確定)
  3、根據情況來看,IIS進程佔用率升高時,SQL佔用率同時升高,應爲SQL數據庫的站點,根據現象判斷,庫或表應該正常,估計是數據方面可能有誤;(不確定)
  4、服務器端除了基本的系統服務,防殺毒及網站運作必備服務之外,並無多餘第三方軟件,機率不大(排除)。
  經過以上分析判斷,將不確定項連起來得出的結論是:某個採用了SQL數據庫的網站網頁代碼存在不合理語法,導致IIS和SQL進程CPU佔用率過高。
  第二階段排查:
  確定範圍,接着繼續把範圍縮小。
   由於服務器上採用SQL數據庫的站點並不多,便於建立獨立進程ID來觀察,將所有采用SQL數據庫的站點在IIS管理器中分別建立獨立的應用程序池,然 後通過CMD界面輸入:iisapp -a 命今查看並記錄下各IIS池的進程ID號,通過多次現象重現時的觀察,有個IIS進程ID是導致此次問題的罪魁禍首。
  2003服務器用.net程序,w3wp老佔cpu資源!怎麼辦?
  w3wp.exe狂佔內存的問題解決方案!
  問:
  好的asp.net程序,放在一臺服務器上,客戶端連接使用一段時間後,在服務器上打開任務管理器一看,發現有很多w3wp.exe,佔用內存很大,達到1g,請問爲什麼會這樣?有什麼辦法可以避免這種情況呢?
  答:這主要是你的ASP.NET 開發的程序有 內存泄漏;對於 非託管資源,一定要注意 釋放。
  -==================================
  問:我的具體情況是這樣的:
  服務器配置 至強2.8G 內存512M SCSI硬盤 2塊 (軟鏡像)
  系統 windows 2003
  現在掛了一個asp.net開發的網站 訪問量不大 但是出現一個 問題就是
  每當服務器運行2-3天后 訪問網站就特別慢 重啓動服務器後就 正常了
  查看進程使用內存的情況 發現w3wp.exe 和sqlservr.exe 進程 佔用內存
  相當大 達到了170多M( 每個) 物理可用內存幾乎用光
  (服務器重啓動時 佔用的內存很小才40多M 每個)
  以前網站掛在一個虛擬機上 數據庫是分開掛的 從沒出現這種情況
  後來 原版移植到新服務器上就 出現這樣的問題~~
  還個一問題就是 我在SQL企業管理器中查看SQL進程 發現有很多是 。net 引起的進程是sleeping 但是卻佔用了內存~ 無法釋放
  搞了很久了 一直都沒解決
  求救~~請高手 指教~~ 萬分感謝~~~~~
  答:IIS服務管理器----》應用程序池----》添加你的應用,並設置最大內存,當程序達到最大內存後其會自動重啓。
  我的問題跟你一樣,不過我的內存是2G的,訪問量比較高,一般是差不多運行24小時後就得重啓,內存沒耗完,W3WP進程佔到一百八九十兆,SQL佔了二百多兆時,就得重啓,不然整個站點就當在那邊....55555555,搞了快半個月了還是不行,痛苦啊
   w3wp.exe就是你的ASP.NET應用宿主,如果你使用了大量的Session、Cache等資源,並且Session超市時間很長,那麼內存佔 用量就比較大。應用池是爲增加性能而設的一個特性,但是也消耗很大的內存。另外關掉Windows Server 2003裏的大多數Service(那個不用都可以關掉),也可以節省一部分內存
  1.懷疑在程序中應用的CACHE,
  2.CACHE中有大量的數據
  3.頻繁刷新CACHE
  4.沒有設計好CACHE的方式
  你的問題我以前也遇見過,我以前是用的Session,後我全部改成cook之後就好多了,應該是你的Session或是你的CACHE有問題(CACHE不太懂,但多多少應該是有的)
  跟蹤下SQL的調用記錄,在每次往CACHE或SESSION寫入大量數據時記錄一下時間,看是否太過頻繁
  1.在win2003裏asp.net的進程就是w3wp.exe
   2.512M內存個人用是夠用了,但是放在服務器上就有點不夠用了,尤其是win2003 + asp.net +sql server 。尤其是sql server 他是很吃內存的,如果不控制的話,他會佔光所有的物理內存(只剩下幾十M 倒 100M 吧)。win2003 本身就要佔用150M左右。也就剩不下什麼了。
  3.優化asp.net程序,就向樓上的說的那樣,少用或不用session cache application之類的東西,再有就是是不是有翻頁的地方,翻頁處理不好也是會佔很多內存的。
  4.限制sql的內存。企業管理器——SQL的屬性(一般是local)——“內存”標籤
  在這裏看內存的設置,把最大值改成100M吧。
  第四條是最快的方法,可以試一試。
  我的一個自開發OA系統也存在這樣的問題。
  總結上面,大概原因是因爲 session 和 cache 的不合理使用造成的。
  我的應用程序中,確實用了很多的Session 和 Cache,
  在 MSDN 中找到 了 “動態內存分配”這一篇,今天就試看看,是否有效。
  希望有經驗的朋友多給些信息,大家也好總結下出現類似錯誤的原因,謝謝!!
   不知道你是什麼網站。按理說是不會佔用這麼大的。如上你用了cache存放了超額的內容。當然。象session這種是不太可能佔用這麼大的了,或用了 application 類似的一些有超長時間或永久保持性的對象來保存大量數據。如利用單例保存數據這些都有可能造成使用大量的內存。
  建義2003系統安裝至少1G內存。
  w3wp.exe是2003下的一個iis進程,至於樓主說的sql佔用內存,那有可能是因爲你的sql沒有設置佔用內存上限
  -==================================
  w3wp.exe進程狂佔內存和CPU問題 誰能幫我??
  我的電腦:P4,512M內存。。當我用了aspx系統建站兩個星期後,就出現了速度極慢的情況,在進程裏看到w3wp.exe狂佔內存和CPU.
  剛開始幾十人註冊時速度都不會有影響,但註冊會員有100名以上後,再有多人同時註冊時就出現了速度極慢的情況,簡直導致癱瘓。
  IIS中設置不正確。在.NET中,不要在IIS裏限制內存的使用,不然當內存不足的時候,IIS會不斷的重新起動。每次起動有30秒的時候用來重新加載.NET包,所以,網站在加載.NET 包時狂慢。這也是我當時用.NET系統時碰到過的問題。
  應用程序池--屬性--回收--內存回收:消耗太多內存時回收工作進程:1、最大虛擬內存。2、最大使用的內存。兩個選項都沒選擇
  這裏不要打勾。另一處是性能裏的請求隊列,不要打勾。
  自已調調看就有經驗了,我也是自已摸索出來的方法。
  A:關於W3WP.EXE的知識.
  Q : W3WP.EXE,應用程序,應用程序池之間的關係
  A : 一個應用程序池可以包含多個應用程序,一個應用程序池創建一個W3WP.EXE進程.那麼我們就不能簡單的說一個進程池對應一個W3WP.EXE進程了!其實是多個應用進程池對應一個W3WP.EXE進程的.
  Q : 如何啓動和關閉W3WP.EXE這個進程
   A : W3WP.EXE這個進程將在你訪問www應用程序的時候啓動.有人就會這麼問了:"我啓動了一個Web應用程序,發現系統自動創建了一個 W3wp.exe進程。但我關閉這個Web應用程序後,發現這個剛創建的W3Wp.exe進程還在,請問如何關閉該進程。"這個進程不會在你關閉了這個程 序以後,就馬上關閉的.那是因爲Http是無連接的訪問,當你關閉了web網頁,不會返回相應的關閉信息,所以W3WP.EXE這個進程不會因爲你關閉了 web應用程序爾關閉.
  Q : 那麼如何關閉這個進程呢?
  A : 在應用程序池的配置中,"空閒超時"中設定合適的時間,系統默認的是20分鐘.設定好指定的時間,那麼在這個時間範圍內沒有在訪問應用程序,那麼系統會自 動的關閉W3WP.EXE這個進程的.而不需要我們人爲的干預的.也可以在Windows任務管理器裏面,結束這個進程
  Q : 如何讓W3WP.EXE進程長時間的運行.
  A : W3WP.EXE這個進程的默認生命是1740分鐘,但依然是在這種默認的自然規律下,W3WP.EXE將在自己失業20分鐘後,被系統直接槍殺.這樣就可以看出,要想讓W3WP.EXE長時間的生存,那我們可以通過”空閒超時”不作處理來達到我們的目的.
  Q : 在IIS6下,經常出現w3wp.exe的內存及CPU佔用不能及時釋放,從而導致服務器響應速度很慢。
  A: 解決內存佔用過多,可以做以下配置
  1、在IIS中對每個網站進行單獨的應用程序池配置。即互相之間不影響。
  2、設置應用程序池的回收時間,默認爲1720小時,可以根據情況修改。再設置當內存佔用超過多少(如500M),就自動回收內存。
  解決CPU佔用過多:
  1、在IIS中對每個網站進行單獨的應用程序池配置。即互相之間不影響。
  2、設置應用程序池的CPU監視,不超過25%(服務器爲4CPU),每分鐘刷新,超過限制時關閉。
  根據w3wp取得是那個一個應用程序池:
  1、在任務管理器中增加顯示pid字段。就可以看到佔用內存或者cpu最高的進程pid
   2、在命令提示符下運行iisapp -a。注意,第一次運行,會提示沒有js支持,點擊確定。然後再次運行就可以了。這樣就可以看到pid對應的應用程序池。(iisapp實際上是存放在 C:\windows\system32目錄下的一個VBS腳本,全名爲iisapp.vbs,如果禁止了Vbs默認關聯程序,那麼就需要手動到該目錄, 先擇打開方式,然後選“Microsoft (r) Windows Based Script Host”來執行,就可以得到PID與應用程序池的對應關係。)
  3、到iis中察看該應用程序池對應的網站,就ok了,做出上面的內存或CPU方面的限制,或檢查程序有無死循環之類的問題。
  A2 : by 小步舞曲
  查看佔用cpu的w3wp進程裏面裏面有那個用戶呼叫的token
  Q : 另一種加載了某程序後發生w3wp.exe問題
   A: 修改C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\CONFIG\machine.config,再配置 節點<processModel>中有一個屬性"memoryLimit",這個屬性的值是一個百分比,默認爲"60"(注意,是60%不是 60M),即制定了ASP.NET進程能夠使用所有物理內存的60%,當ASP.NET使用的內存量草果這個限額時,IIS會開始自動回收進程,即創建一 個新的進程去負責應付HTTP請求,而將舊進程所佔用的內存回收.

Windows 2003中IIS 6.0應用程序池回收和工作進程w3wp.exe內存佔用多

2010-03-13 12:51


最近我服務器的一個網站程序長時間運行後,速度變慢,重新啓動網站後速度明顯變快,估計是網站程序佔用的內存和CPU資源沒能及時釋放,才需要每隔一段時間重啓網站釋放資源。但手工重啓總不能算解決問題的方法,怎樣才能實現自動管理呢?IIS6.0的應用程序池自動回收功能可以解決這一問題。 

       應用程序池是將一個或多個應用程序鏈接到一個或多個工作進程集合的配置。因爲應用程序池中的應用程序與其他應用程序被工作進程邊界分隔,所以某個應用程序池中的應用程序不會受到其他應用程序池中應用程序所產生的問題的影響。

       爲Web程序配置應用程序池需要以下步驟:1)創建應用程序池,右鍵單擊“應用程序池”,“新建/應用程序池”,命名爲KefuAppPool;2)爲Web程序指定應用程序池,在網站虛擬目錄屬性“應用程序設置”裏面的“應用程序池(N)”裏選擇KefuAppPool;3)應用程序池自動回收方式的設置。回收方式有如下幾種:
      a.根據運行時間
       系統默認是1740分鐘,也就是29個小時,這個不是很好控制,建議不用。

      b.請求數目
       這個要看具體的情況了。如果只有10個請求,可是有5個都在請求那個比較佔資源的頁面(可能是統計年度報表之類),這個時候就會出現進程當掉的情況,如果請求有1000個可是一個也沒運行比較佔資源的頁面,這個時候進程肯定是很正常的,所以根據請求的數目來決定也不一定符合實際需要。

      c.計劃的時間
        這個其實很好,不過具體什麼時間回收好呢?通常我們都是設置在凌晨兩三點鐘,這個時候回收是有必要的,不過針對出現隨時可能出現是高內存佔用並不是很適用。

      d.內存(虛擬內存或已使用的內存)
       這個針對出現內存問題引起的進程當掉實在太合適了,不過設置多大的值比較好是一個很重要的問題,值不能太小了,否則如果訪問量都很大超過這個值的時候也會自動回收,這個就很沒必要了。一定要多多觀察進程的實際佔用情況再做決定。

       下面重點談談對工作進程回收應用程序池的理解。
默認情況下,WWW服務建立“重疊回收”,即繼續運行要終止的工作進程,直到啓動新的工作進程後爲止。 在重疊回收方案中,要回收的進程繼續處理請求,同時 WWW 服務創建一個替代工作進程。在停止舊工作進程之前啓動新的工作進程,然後將請求定向到新的進程。此設計可以防止服務中斷,因爲舊進程關閉前仍然保持與 HTTP.sys 的通信以處理請求。因爲可重疊關閉或啓動的關閉超時值是可以配置的,所以在工作進程仍在處理請求的同時可以終止該進程(如果它在時間限制內沒有處理完請求的話)。
        注意:當 WWW 服務回收某個工作進程時,它並不斷開現有的 TCP/IP 連接。HTTP 協議堆棧 (HTTP.sys) 建立並維護 TCP/IP 連接。

IIS中的每個應用程序池由一個“工作進程”進行管理,也就是"W3wp.exe" 進程。如果有多個應用程序池中的程序運行,我們就能看到多個w3wp.exe。這點可以在任務管理器中看到,如下圖所示,任務管理器中有兩個w3wp.exe進程,恰好對應兩個有應用程序在運行的應用程序池。
8205;w3wp.exe佔用內存過高的問題_BUG1342_百度空間 - Interice - MCME

在命令提示符下運行iisapp -a,可以查看w3wp.exe和哪個應用程序池關聯。
        下圖顯示了手動執行應用程序池KefuAppPool的回收,在回收前,回收中和回收後應用程序池和工作進程情況。我們注意到:回收過程中增加了一個工作進程(PID=3896),該工作進程(PID=3896)啓動好後,舊的工作進程(PID=5716)才被停止,新工作進程(PID=3896)正式替代舊進程工作,這就很好的防止了應用程序池回收過程中服務被中斷,保證了程序的連續運行。而其他兩個應用程序池對應的工作進程 PID都沒用變。該圖很好的展示了應用程序池回收的過程。
1)在任務管理器中增加顯示pid字段;2)在命令提示符下運行iisapp -a。注意,第一次運行,會提示沒有js支持,點擊確定。然後再次運行就可以了。這樣就可以看到pid對應的應用程序池。如上圖左側所示,應用程序池 KefuAppPool和PID=3232的w3wp.exe相關聯,應用程序池ReportServer和PID=3572的w3wp.exe相關聯.

8205;w3wp.exe佔用內存過高的問題_BUG1342_百度空間 - Interice - MCME

應用程序池這個東西着實讓管理服務器的人頭疼,如果不設置好網站隨時有可能罷工,甚至拖累服務器。因此特地找來此文章供大家參考。
另外說一點,如果網站訪問量不是很大,晚上沒什麼人訪問,可以嘗試凌晨重啓服務器,這樣可以提高服務器的速度,爲第二天的訪問做準備。
IIS 6的核心在於工作進程隔離模式,而應用程序池則是定義工作進程如何進行工作,因此,可以說應用程序池是整個IIS 6的核心。 
和IIS 5中只能使用單個應用程序池不同,工作在工作進程隔離模式的IIS 6可以創建多個應用程序池,不同的應用程序池之間是完全隔離的,某個應用程序池停止服務時不會影響到其他應用程序池。 
在使用應用程序池之前,你應該確定你所需要的應用程序池數量。可能有很多朋友會認爲,既然不同的應用程序池之間是完全隔離的,那麼我只需要爲每個Web站點創建一個應用程序池就可以了。這個辦法在IIS服務器上具有較少的Web站點數量時可以使用,但是如果IIS服務器上具有很多Web站點數量,那麼這個辦法就不適用了,因爲不同的應用程序池在被訪問時都會創建各自的工作進程,當大量的工作進程併發工作時會消耗大量的系統資源和CPU利用率,反而會降低服務器性能。你應該根據Web站點的重要性、隔離性、所運行代碼的安全性和穩定性等來對IIS服務器上所具有的Web站點進行劃分,然後根據情況來決定所需要的應用程序池數量。對於那些非常重要的Web站點、需要單獨隔離的Web站點、所運行代碼穩定性和安全性並不可靠的Web站點配置爲使用各自獨立的應用程序池,而將其他普通的Web站點配置爲使用一個公共的應用程序池。 
默認情況下,在安裝IIS時會創建一個默認網站並創建一個名爲DefaultAppPool的應用程序池爲其使用;默認配置下的應用程序池已經可以很好的進行工作,建議你只有在特別需要時纔對應用程序池進行配置。

配置應用程序池屬性 
在IIS管理控制檯中展開應用程序池文件夾,然後右擊對應的應用程序池,點擊屬性,你可以在應用程序池的屬性中進行以下配置: 
回收

在回收標籤,你可以設置工作進程的回收方式:

8205;w3wp.exe佔用內存過高的問題_BUG1342_百度空間 - Interice - MCME

回收工作進程(分鐘):在工作進程運行多少分鐘後回收工作進程,默認啓用,並且設置爲1740分鐘(29小時); 
回收工作進程(請求數目):在工作進程處理多少 個HTTP請求後終止此工作進程,默認禁用,如果啓用則默認值爲35000; 
在下列時間回收工作進程:在指定的時間回收工作進程,默認禁用;如需啓用,勾選後點擊添加按鈕添加回收的時間即可,使用24小時制定義回收的時間; 
消耗太多內存時回收工作進程: 
最大虛擬內存(兆):當工作進程使用的虛擬內存達到設置的值時回收工作進程,默認禁用,如果啓用則默認值爲500 M;建議設置爲不超過虛擬內存總數的70%; 
最大使用的內存(兆):當工作進程使用的物理內存達到設置的值時回收工作進程,默認禁用,如果啓用則默認值爲192 M;建議設置爲不超過物理內存總數的60%; 
另外需要注意的是,應用程序池具有以下兩種工作進程回收方式,不過這兩種回收方式均不會造成Web服務的中斷: 
默認情況下,應用程序池使用重疊回收方式。在這種方式下,當應用程序池要關閉某個工作進程時,會先創建一個工作進程,直到新的工作進程成功創建後才關閉舊的工作進程; 
應用程序池也可以先關閉舊的工作進程,然後再創建新的工作進程。 
如果Web 應用程序不支持多實例運行,那麼你必須配置應用程序池禁止使用重疊回收方式。此配置無法在IIS管理控制檯中進行修改,只能通過在 metabase.xml中修改對應應用程序池的DisallowOverlappingRotation metabase屬性爲true進行。

性能

在性能標籤你可以設置工作進程的運行方式:

8205;w3wp.exe佔用內存過高的問題_BUG1342_百度空間 - Interice - MCME

在空閒此段時間後關閉工作進程(分鐘):當工作進程空閒多少分鐘後關閉此工作進程,這降低了空閒工作進程對系統資源和CPU性能的消耗,默認啓用並且設置爲20分鐘; 
核心請求隊列限制爲(請求次數):當HTTP.sys接收到某個客戶端發送的HTTP請求時,如果處理此請求的對應應用程序池的工作進程還處於忙狀態,則HTTP.sys將接收到的請求保存在對應應用程序池的請求隊列中,直到工作進程空閒爲止。此選項即用於設置此應用程序池的請求隊列所能容納的請求數量,默認情況下每個應用程序池的請求隊列限制爲保留1000個請求,如果超出則向客戶端返回503錯誤,你可以根據需要適當進行修改,最大可以設置爲65535。但是如果設置太大則會消耗大量的系統資源 ,而設置太小會導致客戶端訪問時頻繁出現503錯誤。 
啓用CPU監視:監視此應用程序池的CPU使用率,默認未啓用;如果某個應用程序池佔用的CPU利用率過多,那麼可以通過配置此選項來限制此應用程序池; 
最大CPU使用率(百分比):所設置的應用程序池所能使用的最大CPU使用率;啓用CPU監視時默認值爲100; 
刷新CPU使用率(分鐘):刷新CPU使用率的間隔時間;啓用CPU監視時默認值爲5; 
CPU使用率超過最大使用率時執行的操作:當此應用程序池的CPU使用率超過所設置的最大CPU使用率時所進行的操作,啓用CPU監視時默認爲無,此時IIS只是在事件日誌中進行記錄而不進行其他操作;如果選擇爲關閉,那麼IIS將關閉此應用程序池中的所有工作進程; 
Web園:在Web園中你可以配置此應用程序池所使用的最大工作進程數,默認爲1,最大可以設置爲4000000; 配置使用多個工作進程可以提高該應用程序池處理請求的性能,但是在設置爲使用多個工作進程之前,請考慮以下兩點: 
每一個工作進程都會消耗系統資源和CPU佔用率;太多的工作進程會導致系統資源和CPU利用率的急劇消耗; 
每一個工作進程都具有自己的狀態數據,如果Web應用程序依賴於工作進程保存狀態數據,那麼可能不支持使用多個工作進程。

運行狀況

在運行狀況標籤你可以配置應用程序池監視工作進程的運行狀況,

8205;w3wp.exe佔用內存過高的問題_BUG1342_百度空間 - Interice - MCME

啓用Ping:默認情況下應用程序池配置爲每隔30秒Ping工作進程,當工作進程沒有進行響應時,則認爲此工作進程出現故障並默認配置爲關閉此工作進程。你可以修改Ping的時間間隔,但是太長的Ping間隔可能會導致Web服務的中斷,而太短的Ping間隔又會消耗更多的系統資源和CPU利用率,因此建議你保留默認配置; 
啓用快速失敗保護:如果Web應用程序代碼編寫有問題,它可能會導致工作進程持續出現問題。默認情況下應用程序池配置爲啓用快速失敗保護,當工作進程在配置的時間段(默認爲5分鐘)內發生的失敗次數超過了配置的值(默認爲5次),則禁用此應用程序池。 
啓動時間限制:IIS等待屬於此應用程序池的工作進程啓動的時間,當工作進程啓用時間超出此設置值時,IIS會在事件日誌中進行記錄; 
關閉時間限制:當IIS檢測到某個工作進程出現故障時,將此工作進程標記爲關閉,此選項指定了IIS等待工作進程自動關閉的時間限制,如果超出此時間限制後工作進程尚未關閉,則IIS強行關閉工作進程。

標識

在標識標籤,你可以配置工作進程所運行的用戶賬戶。在IIS 5或者當IIS 6運行在IIS 5隔離模式時,工作進程運行在本地系統賬戶,而運行在工作進程隔離模式下的IIS 6的工作進程運行在網絡服務賬戶下,這降低了系統被***的可能性。 
你可以配置工作進程運行在預定義的本地系統、本地服務或網絡服務賬戶下,也可以配置爲使用某個自定義的用戶賬戶。建議使用默認的網絡服務賬戶;不過如果爲了更高的安全性,可以配置使用自定義的用戶賬戶,不過建議你只是將此自定義用戶加入到IIS_WPG用戶組中,因此IIS_WPG用戶組包含了可以啓動和運行工作進程的最小權限限。

8205;w3wp.exe佔用內存過高的問題_BUG1342_百度空間 - Interice - MCME




?2010 Baidu


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章