Answers:
Windows x86下的应用程序限制为2gb / ea。您可以通过在boot.ini中添加/ 3gb标志来更改此设置,但这可能会导致应用程序出现意外行为,应谨慎使用。MS官方不支持此功能(http://technet.microsoft.com/zh-cn/library/bb124810.aspx)
可以在相关应用程序池的“回收”选项卡下设置IIS的内存限制。
您如何确定该应用程序从未超过500MB?如果您使用的是任务管理器,请记住,按照Windows的理解,它很少(如果有的话)是内存使用情况的准确表示。使用流程资源管理器:http : //technet.microsoft.com/en-us/sysinternals/bb896653.aspx
还有许多其他相关问题:
即使Windows Task Manager未显示,IIS,ASP.NET及其所有相关包很可能都超出2GB的限制。设置回收限制或升级到x64可能会有很大的不同。
偶尔会从繁忙的.NET应用程序获取OutOfMemory异常
答案太复杂而无法满足答案。有关该主题的完整处理,请参见“ 调整.NET应用程序性能 ”。
这是来自Bruno Jouhier的大大简化(但仍然相当不错)的摘要:
此外,.NET运行时不允许您增加到2 GB。垃圾收集器通过复制活动对象来工作,因此需要大量空间来执行其复制。
这是我的一个解释尝试...
如果您想知道x86上的ASP.NET辅助进程的最大辅助进程内存大小(由任务管理器报告),答案是“取决于”。
在任何类型的托管代码(如Java或.NET)中,程序员都放弃了对内存的细粒度控制,以免不必处理指针。在程序执行时,垃圾收集器会定期清理堆和堆栈。
特别是对于ASP.NET,垃圾收集器在与网站相同的工作进程中运行。GC消耗自己的内存。如何多少内存完全是你的应用程序的代码是如何写的功能。一个应用程序可能可以使用1.8GB的内存,而另一个应用程序可能占用500MB的内存。为了理解为什么,您需要分析您的特定应用程序。
从此博客文章“ SharePoint应用程序池设置的建议”中:
专注于物理方面,我通常希望将32位应用程序上的应用程序池最大限制在800MB至1200 MB之间,根据内存的数量和数量,应用程序池很少。在具有2 GB RAM的服务器上,我将其设置为最大800MB。在4GB的RAM服务器上,大约1GB,如果更多,甚至更多,最大在1200附近。在具有8-16 GB内存的64位Web前端上,我听说过2GB RAM的设置,甚至允许它骑行,而不是限制它。
您确实需要对其进行概要分析,因为它们确实可以扩展到处理和缓存。内存量越大,负载越大,工作进程将增长得越高。当人们询问配置应用程序池时,通常是在这里询问数字应该是多少。您在这里所做的是明确限制应用程序池消耗更多的内存。请注意,此设置位于“回收”选项卡上,这是有原因的。
当应用程序池达到最大值时,它与最大值处理器设置不同。它会循环工作进程,就像进行微小的重启或类似于iisreset一样,但不是因为有时我们希望这种情况发生以便释放内存。您确实不希望在理想的世界中每24小时循环几次。我听说有人在早上高峰出现之前尝试进行循环,以便它们拥有最大的可用内存,然后在一天结束时进行循环,直到备份或爬网开始。
根据我的经验,800 MB是32位计算机(2-4 GB RAM)的门槛。它在抛出“内存不足”异常之前回收应用程序池。
确保没有在应用程序池上设置虚拟内存大小。如果将此值设置为允许范围之外的数字,它将恢复为512MB。参见KB923197。
还要注意,如果您正在运行ASP.Net应用程序,则ASP.Net将以2GB内存限制(即1.2 GB)的60%回收池。这不是您的约500个方案,但是在内存使用量大的32位应用程序池中,有时我们会花一些时间来获得更多的内存。
<system.web>
<processModel memoryLimit="80" />
</system.web>