消除了明显(或者我认为)和最大的内存消费者(asp.net缓存中的图像)后,没有太大的变化。我们在此Web中使用企业库异常处理(不知道为什么,但我们这样做)并且这些异常不会被记录。只是为了记录,服务器有4 GB的内存,所以我不认为物理内存是问题。
根据事件日志,发生了什么:
首先我从一个页面得到这个(很少从同一页面两次):
Exception information:
Exception type: Exception
Exception message: mscorlib - Exception of type 'System.OutOfMemoryException' was thrown.
然后这个:
Description:
An unhandled exception occurred and the process was terminated.
Application ID: /LM/W3SVC/672222825/Root
Process ID: 1544
Exception: System.OutOfMemoryException
Message: Exception of type 'System.OutOfMemoryException' was thrown.
StackTrace: at System.Threading.ExecutionContext.CreateCopy()
at System.Threading._TimerCallback.PerformTimerCallback(Object state)
我的问题是:如何使用分析器查看导致崩溃的原因?我已经尝试了两个分析器 - .net内存分析器和JetBrains的dotTrace。内存分析并没有真正给我任何有用的东西,除了我有很多字符串。性能分析也没有帮助,因为函数的执行时间都很好而且花花公子。如果在分析器运行时发生此错误,它只是停止分析 - 我可能使用它错了。
P.S。对于formmating抱歉,尽力而为。
答案 0 :(得分:1)
问题解决了 - 其中一位开发人员正在将整个数据表存储在会话中并且占用内存(并且没有费心去问其他人是否正常)。
只有让我感到困惑的是,它必须崩溃如此丑陋而不是抛出YouIdiotYoureOverUsingSessionObjectException:)
哦,好好生活和学习......
答案 1 :(得分:0)
我会检查你是否在IDisposable实现上调用Dispose。检查的一个相当好的方法是通过FXCop运行代码。
答案 2 :(得分:0)
machine.config中有ProcessModel部分的内存限制属性,用于在回收之前控制ASP.NET最大内存使用量。