IIS内存溢出-设置IIS的应用程序池

在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服务器

相关文章
相关标签/搜索