在ASP.NET Web服務器上,ASP.NET所可以用到的內存,一般不會等同於全部的內存數量。在machine.config(C:/WINDOWS/Microsoft.NET/Framework/v1.1.4322/CONFIG)配置文件中,配置節<processModel>中有一個屬性「memoryLimit」,這個屬性的值是一個百分值,默認爲「60」,即指定了ASP.NET進程(在任務管理器中你們就能夠看到ASP.NET的進程,IIS5中爲aspnet_wp,IIS6中爲w3wp)可以使用全部物理內存的60%。當ASP.NET使用的內存量超過這個限額時,IIS會開始自動回收(recycle)進程,即建立一個新的進程去負責應付Http請求,而將舊進程所佔用的內存回收。
當咱們有一臺很大內存的服務器時,「memoryLimit」這個值是須要進行適當的調整的。好比咱們準備了一臺chemas-microsoft-com ffice marttags" />t="on">4G內存的服務器,那麼t="on">4G×60%=t="on">2.4G。可是,對於Win32操做系統,一個進程所能佔用的全部內存空間只有t="on">2G。當ASP.NET進程佔用的內存開始達到t="on">2G時,因爲它並無達到t="on">2.4G的「回收閾值」,因此IIS不會啓動recycle進程操做,可是因爲Win32的限制,實際上已經不能給這個進程分配更多的內存了,因而,OutOfMemoryException就極可能會被拋出了。爲了不這樣的狀況,咱們就必須將「memoryLimit」適當調小,以讓IIS更早的進行進程回收。
微軟推薦的ASP.NET進程佔用內存是不超過60%,並最好使計算出的實際值不超過t="on">800M。就是說,對於一臺t="on">4G內存的服務器,最好將「memoryLimit」屬性設置成「20」。設置一個適當的回收閾值,讓IIS適時的進行進程回收,對於保證整個服務器的穩定運行,避免OutOfMemoryException是很是重要的。
在IIS6中,ASP.NET進程的回收閾值再也不由配置節中的「memoryLimit」屬性決定,而是由IIS管理器中的應用程序池配置中的設置決定。
可是,即便正確設置了這些配置,也不能保證徹底避免OutOfMemoryException的發生,緣由多是多樣而複雜的,好比內存回收操做可能耗時太多等等。開發人員要注意的,就是在代碼中時刻牢記不要無謂的使用和浪費內存。:)
若是你有一臺大內存的服務器,同時對Win32操做系統中對於進程最高使用t="on">2G內存的限制很鬱悶,可選的解決方法有兩個:
一、使用/3GB模式啓動計算機,方法參加文後的連接
二、使用Windows Server 2003 64bits Editionhtml
轉自http://www.cnblogs.com/jonhson/archive/2012/03/08/2384869.html服務器