`

System.OutOfMemoryException 的异常的错误解决方案

阅读更多
一 在IIS6.0应用程序池,单击默认应用程序池的属性,√回收工程进程

在ASP.NET Web服务器上,ASP.NET所能够用到的内存,通常不会等同于所有的内存数量。在machine.config配置文件中,配置节<processModel>中有一个属性“memoryLimit”,这个属性的值是一个百分值,默认为“60”,即指定了ASP.NET进程(在任务管理器中大家就可以看到ASP.NET的进程,IIS5中为aspnet_wp,IIS6中为w3wp)能够使用所有物理内存的60%。当ASP.NET使用的内存量超过这个限额时,IIS会开始自动回收(recycle)进程,即创建一个新的进程去负责应付Http请求,而将旧进程所占用的内存回收。
当我们有一台很大内存的服务器时,“memoryLimit”这个值是需要进行适当的调整的。比如我们准备了一台4G内存的服务器,那么4G×60%=2.4G。但是,对于Win32操作系统,一个进程所能占用的所有内存空间只有2G。当ASP.NET进程占用的内存开始达到2G时,由于它并没有达到2.4G的“回收阈值”,所以IIS不会启动recycle进程操作,但是由于Win32的限制,实际上已经不能给这个进程分配更多的内存了,于是,OutOfMemoryException就很可能会被抛出了。为了避免这样的情况,我们就必须将“memoryLimit”适当调小,以让IIS更早的进行进程回收。
微软推荐的ASP.NET进程占用内存是不超过60%,并最好使计算出的实际值不超过800M。就是说,对于一台4G内存的服务器,最好将“memoryLimit”属性设置成“20”。设置一个适当的回收阈值,让IIS适时的进行进程回收,对于保证整个服务器的稳定运行,避免OutOfMemoryException是非常重要的。
在IIS6中,ASP.NET进程的回收阈值不再由配置节中的“memoryLimit”属性决定,而是由IIS管理器中的应用程序池配置中的设置决定。
但是,即使正确设置了这些配置,也不能保证完全避免OutOfMemoryException的发生,原因可能是多样而复杂的,比如内存回收操作可能耗时太多等等。开发人员要注意的,就是在代码中时刻牢记不要无谓的使用和浪费内存。


二:修改 %WINDIR%\Microsoft.NET\Framework\v2.0.50727\Aspnet.config 档案 ( 如果是 .NET 1.1 要修改 %WINDIR%\Microsoft.NET\Framework\v1.1.4322\Aspnet.config 檔案 ):

预设的 Aspnet.config 这样:

<?xml version="1.0" encoding="UTF-8" ?><configuration> <runtime> <legacyUnhandledExceptionPolicy enabled="false" /> <legacyImpersonationPolicy enabled="true"/> <alwaysFlowImpersonationPolicy enabled="false"/> <SymbolReadingPolicy enabled="1" /> </runtime></configuration>
需加上一行 <gcServer enabled="false"/> 如下:

<?xml version="1.0" encoding="UTF-8" ?><configuration> <runtime> <gcServer enabled="false" /> <legacyUnhandledExceptionPolicy enabled="false" /> <legacyImpersonationPolicy enabled="true"/> <alwaysFlowImpersonationPolicy enabled="false"/> <SymbolReadingPolicy enabled="1" /> </runtime></configuration>
这样就设定完成了!
分享到:
评论

相关推荐

    Net 内存溢出(System.OutOfMemoryException)的常见情况和处理方式总结

    在什么情况下会出现OutOfMemonryException呢? 在我们试图新建一个对象时,而垃圾收集器又找不到...异常的; 另一种情况是,CLR需要内存时,而却系统却不能提供,也会抛出该异常. 但此时,我们的应用程序是不能捕获该错误的.

    SQL Server出现System.OutOfMemoryException异常的解决方法

    标题中的“SQL Server出现System.OutOfMemoryException异常的解决方法”指的是在使用SQL Server时遇到的一种常见错误,即系统内存不足异常(System.OutOfMemoryException)。这种异常通常发生在SQL Server试图处理的...

    System.OutOfMemoryException(解决方案).md

    System.OutOfMemoryException(解决方案).md

    .net 一些无法catch的异常

    非CLS的异常(一般来源于本地代码,这些异常不继承于System.Exception)在.net framework 4.0中默认行为不捕获非CLS的异常在.net framework 2.0中会把非CLS的异常包装为System.Exception的之类(可以catch

    给pdf加水印

    然而,在实际操作中,可能会遇到一些技术问题,如“System.OutOfMemoryException”异常和“未将对象引用设置到对象的实例”的错误。下面我们将详细探讨这些问题的原因及解决方法。 1. **“System....

    dotnet C# 应用程序进程创建太多线程将会抛出 OutOfMemoryException 异常.rar

    在.NET框架中,C#应用程序在执行过程中可能会遇到各种异常情况,其中之一是`OutOfMemoryException`。这个异常通常表示程序尝试分配的内存超过了系统能够提供的内存。然而,一个常见的误解是,`OutOfMemoryException`...

    .NET-第5部分.ppt

    7. `System.OutOfMemoryException`:内存分配失败时抛出。 8. `System.OverflowException`:在受检查的上下文中,算术运算溢出时抛出。 9. `System.StackOverflowException`:当调用堆栈耗尽时,即方法调用过多时抛...

    内存溢出xssfworkbook

    File test = new File&#40;"D:\\test.xlsx"&#41;; try { XSSFWorkbook wb = new XSSFWorkbook(new FileInputStream(test))... System.out.println(i+":null"); } } } catch (Exception e) { e.printStackTrace(); }

    .NET课件--第5部分类型管理.ppt

    - `System.OutOfMemoryException`:内存分配失败时抛出。 - `System.OverflowException`:在检查模式下,算术运算溢出时抛出。 - `System.StackOverflowException`:堆栈溢出,通常是因为递归过深或无限循环导致。 ...

    C#异常处理总结及简单实例

    * System.OutOfMemoryException 没有足够的内存继续执行程序时引发的异常。 * System.StackOverflowException 挂起的方法调用过多而导致执行堆栈溢出时引发的异常。 2. 由 System.ArgumentException 派生的异常...

    C#异常处理与预处理

    - **`SystemException`**:包含了所有由运行库直接引发的异常,如`ExecutionEngineException`、`StackOverflowException`、`OutOfMemoryException`等,这些异常往往表示严重且不可恢复的错误。 - **`...

    c#常见错误处理的几种方法

    C# 中的错误处理是编程中不可或缺的一部分,它能够帮助开发者检测和解决程序中的错误。在 C# 中,错误处理是通过 try-catch 块来实现的,try 块中包含可能出现错误的代码,而 catch 块中包含错误处理代码。 在 C# ...

    C#教你使用异常处理

    在C#编程中,异常处理是一项关键技能,它允许开发者优雅地处理运行时错误,确保程序的健壮性和用户友好性。本文将深入探讨C#中的异常处理机制,包括其基本概念、常用关键字、异常处理格式,以及如何通过实战案例理解...

    捕捉.net无法捕捉的错误

    然而,有些错误级别过高,不能被常规的try-catch块捕获,例如StackOverflowException(堆栈溢出异常)和OutOfMemoryException(内存不足异常)。这两种异常是系统级的,如果它们未被正确处理,可能会导致整个应用...

    namespace-system简述

    它还包含了处理异常、内存管理和垃圾收集的类,如`OutOfMemoryException`、`GC`和`WeakReference`。 总之,System命名空间是C#开发中不可或缺的部分,它提供了大量用于构建健壮、安全且高效应用程序的基础工具和...

    Java内存泄露解决方案

    Java 内存泄露 解决方案 outofmemoryException 从实践获取真理

Global site tag (gtag.js) - Google Analytics