5

这是 Windows server 2008 R2,64 位,32gb RAM,我认为它运行 IIS 7.5。我们已将应用程序池设置为使用 4 个工作进程。

这是一个 ASP.NET 4 应用程序,但在 32 位兼容模式下运行。

当内存使用量超过 650-700MB/工作进程时,我们会收到 oSystem.OutOfMemoryException。

我认为它应该能够处理高达 2gb 或至少 1.5gb 而没有问题?

还有一点,为什么有System.OutOfMemoryException的时候不回收worker进程呢?

更新:此应用程序在带有 IIS6.0 的 64 位 windows server 2003 上运行良好。我已经看到它的最大内存使用量约为 700mb/worker 进程。

更新:高内存使用的原因是使用 DOM 进行 XML 处理。我们将着手解决这个问题,但这是一个长期计划。我只是觉得它不能超过 650 mb 很奇怪。

4

3 回答 3

4

更常见的获取原因System.OutOfMemoryException是由于内存碎片——内存中没有足够大的连续空间。您应该安装一个内存分析器来验证这一点 - 然后您还可以尝试找出哪些对象占用了内存。

如果可能,您可能想要测试 .NET 4.5 - Microsoft 已对垃圾收集器进行了更改,以便自动对服务器应用程序(例如 IIS)的 LOH 进行碎片整理:http: //blogs.msdn.com/b/dotnet/archive /2011/10/04/large-object-heap-improvements-in-net-4-5.aspx

于 2013-02-19T16:58:35.640 回答
2

您是否已将服务器配置为正确处理服务器垃圾收集?对于 asp 4.5,该设置位于 Aspnet.config 文件中的运行时节点下

<performanceScenario value="HighDensityWebHosting">
于 2013-09-17T12:44:12.767 回答
1

你检查最大值了吗?分配的内存,而不仅仅是查看 taskmanager 时当前分配的内存?

因为最大。分配的内存是它实际保留并因此使用的内存。

这种异常的常见原因是未分页数据网格中显示的大型 DataTable。

于 2013-02-20T06:39:38.143 回答