生产服务器中的系统内存不足异常

时间:2009-11-24 17:56:36

标签: asp.net-2.0

我们在生产服务器上安装了.net应用程序。它在Windows Server 2003上使用.net FrameWork 3.0,RAM为4 GB。 但是在应用程序运行时有一个问题,有时会抛出系统内存异常。我对此非常沮丧。此外,我无法模拟这个问题。我检查了可能导致问题的所有可能性,但没有得到解决问题的任何东西

我检查了生产服务器事件日志,发现Out of Memory Exception还有INVALID VIEW STATE日志。 查看以下事件日志,这可能有助于查找解决方案。

Exception information: 
    Exception type: HttpException 
    Exception message: Invalid viewstate. 
Request information: 
    Request path: /zContest/ScriptResource.axd 
    User: LisaA 
    Is authenticated: True 
    Authentication Type: Forms 

Thread information: 
    Thread ID: 10 
    Is impersonating: True 
    Stack trace:    at System.Web.UI.Page.DecryptStringWithIV(String s, IVType ivType)
   at System.Web.UI.Page.DecryptString(String s)
   at System.Web.Handlers.ScriptResourceHandler.DecryptParameter(NameValueCollection queryString)
   at System.Web.Handlers.ScriptResourceHandler.ProcessRequestInternal(HttpResponse response, NameValueCollection queryString, VirtualFileReader fileReader)
   at System.Web.Handlers.ScriptResourceHandler.ProcessRequest(HttpContext context)
   at System.Web.Handlers.ScriptResourceHandler.System.Web.IHttpHandler.ProcessRequest(HttpContext context)
   at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
   at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
------------------------------------------------------ ------------------------------------------------------------------------------------------------------------------------------------------------------------------
Event code: 3005 
Event message: An unhandled exception has occurred. 
Process information: 
    Process ID: 5388 
    Process name: w3wp.exe  
Exception information: 
    Exception type: OutOfMemoryException 
    Exception message: Exception of type 'System.OutOfMemoryException' was thrown. 
------------------------------------------------------ ------------------------------------------------------------------------------------------------------------------------------------------------------------------

请帮我解决这个问题

5 个答案:

答案 0 :(得分:3)

我发现这是与分配给大对象堆和应用程序池内存回收设置的IIS上的.NET内存管理有关的问题。

在具有1GB或更少物理内存的32位服务器上,服务器将默认内存回收率为60%的物理内存使用量,大约为600MB。超过600MB,您会注意到微软自己承认的超出内存的情况会显着增加。

http://msdn.microsoft.com/en-us/library/ms972959.aspx

  

建议内存限制为物理RAM的60%以避免分页,   特别是当一个新的过程由于过度而取代旧过程时   记忆消耗。 .....调整内存限制很重要   在具有大量物理RAM的机器上,以便缓存   内存管理器和进程回收功能正常。例如,   假设您有一个4千兆字节(GB)物理RAM的服务器   使用默认内存限制。这是个问题。百分之六十   物理RAM为2.4 GB,大于默认虚拟   地址空间为2 GB。那么内存限制应该设置为什么?   ......有几件事需要考虑:F irst,可能性   遇到OutOfMemoryException开始增加   当“Process \ Virtual Bytes”在600 MB以内时显着   虚拟地址空间限制(通常为2 GB),

使用1GB的物理内存时,默认设置可以正常,但是大于1GB时,您需要对应用程序池内存回收设置进行一些调整或更改相应的配置数据库设置。

其他相关文章:

答案 1 :(得分:1)

在面值处获取错误消息。它说内存已经耗尽。最明显的原因是您的流程随着时间的推移而不断增长。那么你有什么监控能力来验证这种情况呢?

假设发生了这种情况,那么有两种可能性:

  1. 你的应用程序是故意增长的 - 例如你缓存越来越多的数据并最终使用了太多的内存以至于没有空间可以使用
  2. 内存泄漏,可能在应用程序中,可能在您正在使用的库中。
  3. 通过简单地查看代码来找到这样的问题,就像一次分拣一根干草堆一样寻找针头。你需要工具。一个快速的谷歌“.net内存泄漏检测”揭示了很多这样的工具。

答案 2 :(得分:1)

找出内存限制并尝试增加内存限制没那么有用,因为你甚至不知道应用程序如何使用内存,或者是否有可能使用更少的内存。

此Microsoft帖子显示了最常见的原因,当然还有关于如何进一步分析内存使用情况的资源,

http://blogs.msdn.com/b/webtopics/archive/2009/05/22/troubleshooting-system.outofmemoryexceptions-in-asp.net.aspx

答案 3 :(得分:0)

这只是黑暗中的一个完整镜头,但是有一些异常日志记录/管理haping并且是否可能在异常管理框架内抛出异常?如果是这样,它会将应用程序抛入无限循环,从而导致内存不足异常。

当内存不足异常跟随其他异常时,这通常是我看的第一个地方。

答案 4 :(得分:0)

尝试:IIS管理器 - > ASP - >限制属性 - >最大请求实体主体限制。

我增加了限制。它对我有用。