解决'System.OutOfMemoryException' 的问题

来源:互联网 发布:小米mix淘宝 编辑:程序博客网 时间:2024/05/21 06:17
 最近公司网站出现下面情况

Server Error in '/L' Application.

Exception of type 'System.OutOfMemoryException' was thrown.

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.OutOfMemoryException: Exception of type 'System.OutOfMemoryException' was thrown.

 

 

 进过分析:由于应用程序池满了,造成内存不足!

        在其中 server 是一个负载情况下可能会出现此问题。 例如,如果门户包含超过 100 个子网站,并且每个 100 个子网站中包含的一个或多个 Web 网页访问在同一时间可能会发生此问题。

       

替代方法

要解决此问题,配置要使用多个 Microsoft Internet 信息服务 (IIS) 工作进程 (W3wp.exe) MSSharePointPortalAppPool 应用程序池。 例如,如果您的门户包含 120 子网站,配置 MSSharePointPortalAppPool 要为 30 个子网站的每个组使用一个辅助进程应用程序池。 因此,MSSharePointPortalAppPool 应用程序池使用四个 IIS 工作进程。
 

在博客园看到了一位园友写的文章《如何处理OutOfMemoryException异常?》,于是想和大家交流一下ASP.NET中出现OutOfMemoryException的问题。

实际上,在ASP.NET Web服务器上,ASP.NET所能够用到的内存,通常不会等同于所有的内存数量。在machine.config配置文件中, <processModel>中有一个属性“memoryLimit”,这个属性的值是一个百分值,默认为“60”,即指定了ASP.NET进程(在任务管理器中大家就可以看到ASP.NET的进程,IIS5中为aspnet_wpIIS6中为w3wp)能够使用所有物理内存的60%。当ASP.NET使用的内存量超过这个限额时,IIS会开始自动回收(recycle)进程,即创建一个新的进程去负责应付Http请求,而将旧进程所占用的内存回收。

当我们有一台很大内存的服务器时,“memoryLimit”这个值是需要进行适当的调整的。比如我们准备了一台chemas-microsoft-comSurprisefficeTongue Tiedmarttags" />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内存的限制很郁闷,可选的解决方法有两个:
1
、使用/3GB模式启动计算机,方法参加文后的链接
2
、使用Windows Server 2003 64bits Edition

 
 
 
原创粉丝点击