与32位相比,ASP.NET 4.0工作进程64位占用的内存增加了5倍
我已将一个ASP.NET v4.0应用程序迁移到在Win2008 server x64操作系统下运行的新服务器。由于当应用程序池设置为“启用32位应用程序”=False(在x64 IIS上应为默认值)时,迁移的asp.net应用程序似乎没有问题,因此我让它在64位模式下运行 结果是,用户会话经常被中断,因为工作进程很快就超过了它的虚拟内存限制。出于这个原因,我测试了同一个应用程序和同一个应用程序池,只需一个修改的设置——我将“启用32位应用程序”切换为True,让它在“WOW64”模式下运行;其他一切都保持原样。我使用完全相同的用户工作场景比较了两种模式下工作进程消耗的内存量,结果有点让我震惊:与32位相比,ASP.NET 4.0工作进程64位占用的内存增加了5倍,asp.net,iis-7,64-bit,32bit-64bit,wow64,Asp.net,Iis 7,64 Bit,32bit 64bit,Wow64,我已将一个ASP.NET v4.0应用程序迁移到在Win2008 server x64操作系统下运行的新服务器。由于当应用程序池设置为“启用32位应用程序”=False(在x64 IIS上应为默认值)时,迁移的asp.net应用程序似乎没有问题,因此我让它在64位模式下运行 结果是,用户会话经常被中断,因为工作进程很快就超过了它的虚拟内存限制。出于这个原因,我测试了同一个应用程序和同一个应用程序池,只需一个修改的设置——我将“启用32位应用程序”切换为True,让它在“WOW64”模式下运行;其
- 在WOW64 32位模式下运行时,工作负载消耗约150MB
- 在“默认”64位工作进程模式下,相同的工作负载消耗约800MB
如此巨大的内存影响被认为是正常的吗?是否有可能以某种方式减少/修复它?经过进一步调查,似乎没有内存问题。。新服务器只有更多内存,而在64位操作系统应用程序池上运行时,只允许分配更大的内存资源。这看起来像是内存泄漏,但由于进程从分配的一定数量的RAM中停止消耗额外内存,因此似乎根本不是内存问题。感谢所有的回复。我们看到了类似的情况-请参阅。然而,如果真是这样,我会感到惊讶。有没有非托管代码,第三方库?似乎您在x64中有内存泄漏,因为您得到了一次又一次的回收。但这仅适用于.NET2.0。@dash感谢您的链接。症状类似,但与.NET 2.0有关。@Aliostad解决方案仅引用.NET4标准程序集“System.*”,只有一个例外。它还引用了Microsoft.Web.UI.WebControl程序集-在.NET 4.0中不再可用。这可能会导致该问题,因为它不再可用,因此在将解决方案升级到.NET4期间未对其进行更新。我最初预计,具有此旧引用的应用程序根本不会在64位模式下运行,但它确实会运行。唯一的问题是内存消耗。您使用哪些工具进行故障排除?