IIS7.5中x64进程的内存限制

时间:2013-02-27 13:46:46

标签: asp.net .net iis-7.5 clr

Windows Web Server 2008 R2(x64)& .Net Framework 4.5

这是一个经典的ASP.Net网站(不是网络项目,代码在 App_Code 目录中,并在网站启动时编译)

它取决于 / Bin 目录中的许多参考DLL。 对于那些我有源代码的DLL,我将其编译为“x64”平台。

我还有其他一些没有源代码的DLL(mysql.data.dll / etc),它们编译为“Any CPU”。 我在 EditBin.exe 中对它们进行了修改,以确保在其标头中显示IMAGE_FILE_LARGE_ADDRESS_AWARE标志。

根据此表: http://msdn.microsoft.com/en-us/library/aa366778%28VS.85%29.aspx#memory_limits

除非设置了 IMAGE_FILE_LARGE_ADDRESS_AWARE ,否则x64进程无法使用超过2GB的内存。

如何验证是否有效? 有没有可以看到运行x64进程的内存限制的地方?

2 个答案:

答案 0 :(得分:1)

我不知道你是否真的可以“看到内存限制”明确声明(假设你不相信你引用的MS自己的文档),除了亲自动手并深入研究IIS和/或ASP。 NET源代码。

话虽这么说,您可以尝试对网站进行压力测试,并监控内存消耗(通过Task ManagerProcess Monitor),看看它是否超过2GB。我会推荐tinygetIIS 6 Resource Kit的一部分,can still be used with IIS 7

tinyget -svr:localhost -uri:/<your site> -loop:200 -threads:20

你必须使用循环和线程计数来尝试将其推到2GB以上。当你接近大约1.4GB的物理和虚拟专用字节时,我希望看到System.OutOfMemoryException。您可能希望在站点本身创建压力测试功能,仅用于测试目的,这将通过使用与良好实践完全相反的方式帮助您达到此限制。您可以阅读有关导致System.OutOfMemoryException` here的更多信息,然后执行他们建议的操作。例如,添加一个只在非常大的循环中连接字符串的测试方法。

答案 1 :(得分:0)

从sysinternals here尝试procexp。此应用程序可以监视.NET特定的指标。

然而,根据您的链接,您应该能够至少解决8GB。

请注意,在您的情况下,强制执行IMAGE_FILE_LARGE_ADDRESS_AWARE无关紧要。您可以将所有组件编译为“任何CPU”,唯一检查的标志是可执行文件的标志。