`

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 从实践获取真理

    数据库实验四代码截图1

    - 在执行某些查询时遇到了内存溢出异常(`System.OutOfMemoryException`)。这表明查询过程中消耗了大量的内存资源,可能是由于查询结果集过大或者内部处理过程中的资源分配不当所导致。解决此类问题通常需要从以下...

    Java常见异常总结

    通过理解每种异常的含义、触发条件和解决策略,开发者可以更加自信地应对程序中的错误,从而提高代码的稳定性和可靠性。 #### 1. `ArithmeticException` 当执行算术运算时遇到非法操作,如除以零,就会抛出`...

Global site tag (gtag.js) - Google Analytics