2013-07-08 47 views
3

我们遇到了一个奇怪的问题。我们的ASP.NET应用程序运行在具有16Gb RAM的64位Windows 2008/IIS7机器上。当w3wp.exe进程达到4Gb(我们通过服务器上的任务管理器简单地跟踪它) - 内存不足即使仍有大量内存可用,仍会引发exeption。即使仍有内存可用,w3wp.exe耗尽内存

是否存在一个已知问题:ASP.NET进程限于64位系统(并使用64位应用程序池)的4Gb内存?

有什么办法解除这个限制吗?

+0

如果一个应用程序池超过1GB的RAM,这是我学到的典型危险。我读过的一般准则是保持<1 GB。检查是否将可用内存限制到应用程序池。你可能不得不考虑负载均衡,或者找出.NET应用程序中的哪个进程正在运行。收集未使用的资源,并确保根据需要释放资源。是否还有其他应用程序池在此服务器上运行?的SharePoint? – ApolloSoftware

+0

@AmitApollo感谢您的回复。是的,我知道记忆滥用的含义,我正在寻找可能的原因。同时我确实需要这个ASP.NET进程能够超过4Gb的RAM。有任何想法吗?这台服务器上还有其他应用程序池,但没有像这个应用程序那样激烈。没有共享点。内存不仅仅在高峰期保持这个高度,它确实下降,但我确实需要它能够超过这个限制。 –

+0

您是否在专门针对32位架构的自定义配置下构建了它,或者它是否是任何CPU配置? –

回答

1

这种声音就像你有一个不明原因的资源,最终得到垃圾收集,但不够快,不足以满足你的需求。你重用了任何SQLConnection对象吗?或者MailClient对象?还是非托管的图像对象?

至于低于预期的内存限制,ASP.NET应用程序使用两种类型的内存。一个是保留内存,另一个是实际使用的内存。我相信任务管理器会跟踪实际的内存使用情况,但预留的内存也可能有限制。要了解您的进程占用了多少保留内存,请转至IIS7,单击服务器(顶层,上方的应用程序池和站点文件夹),然后单击进程选项,然后单击应用程序的进程。它应该显示CPU使用情况,请求数量和内存使用情况(包括预留和实际)。