什么是IIS6网站/应用程序池可以使用的最大内存?

我有一个运行在Windows 2003 SP2 x86上的IIS 6服务器。 该服务器有4GB的RAM,并运行与2GB分配。

我意识到使用x86时,服务器将不会使用所有的4GB RAM,应用程序空间也是有限的,但IIS进程在其他地方似乎是有限的。 w3wp.exe从来没有超过500MB的分配,我偶尔从一个繁忙的.NET应用程序(有几个应用程序运行,每个都有一个单独的应用程序池)获取OutOfMemoryexception。

什么是IIS6网站/应用程序池可以使用的最大内存

Windows x86下的应用程序限于2GB /每个。 您可以通过将/ 3gb标志添加到boot.ini来更改此设置,但这可能会导致意外的应用程序行为,因此应谨慎使用。 MS官方不支持这个( http://technet.microsoft.com/en-us/library/bb124810.aspx

可以在相关应用程序池的“回收”选项卡下设置IIS的内存限制。

你如何确定应用程序永远不会超过500MB? 如果您使用的是任务pipe理器,请记住,Windows很less(如果有的话)正确表示内存使用情况。 使用进程资源pipe理器: http : //technet.microsoft.com/en-us/sysinternals/bb896653.aspx

还有一些其他相关的问题:

  • 您的事件日志中是否logging了错误?
  • 这是一个特殊的代码行抛出exception? 如果是这样,这个OutOfMemoryexception实际上是IIS问题还是代码问题?
  • 您是否使用Recyling设置来限制您的应用程序池?
  • 有没有其他的服务在这台机器上运行?

即使Windows任务pipe理器不显示它,IIS,ASP.NET及其所有关联的行李也很有可能达到2GB的限制。 设置回收限制或升级到x64可能会产生巨大的差异。

偶尔会从繁忙的.NET应用程序中获取OutOfMemoryexception

答案太复杂,不适合答案。 有关该主题的完整处理,请参阅“ 调整.NET应用程序性能 ”

这里有一个来自Bruno Jouhier的简短的 (但还是相当不错的)总结:

此外,.NET运行时不会让你上升到2 GB。 垃圾收集器通过复制活动对象来工作,所以需要相当大的空间来执行其复制。

编辑:

这是我对一个解释的尝试…

如果您想知道最大的工作进程内存大小(由任务pipe理器报告)是什么在x86工作进程上的答案是“这取决于”

在任何types的托pipe代码(如Java或.NET)中,程序员都放弃对内存的细粒度控制,因为它不必处理指针。 在程序执行时, 垃圾收集器会定期清理堆栈和堆栈。

特别是关于ASP.NET,垃圾收集器在与网站相同的工作进程内运行。 GC消耗自己的内存。 多less内存完全是你的应用程序的代码写入function。 一个应用程序可能会使用1.8GB的内存,而另一个可能会窒息500MB。 为了理解为什么 ,你需要描述你的具体应用。

除非您在boot.ini文件中设置了/ 3gb开关,否则x86 Windows操作系统上的任何进程都被限制为2GB,在这种情况下进程可以使用3GB。

从此博客文章“SharePoint应用程序池设置的build议” :

关注物理我通常喜欢根据内存的数量和数量,在32位应用程序上将应用程序池的容量限制在800MB到1200MB之间,只有极less的应用程序池。 在2 GB RAM的服务器上,我将它设置在最大800MB左右。 在1GB左右的4GB内存服务器,如果更多,最多1200左右。在一个64位的networking前端,8-16 GB的内存我听说2GB的RAM的设置,甚至让它让它骑,而不是限制它。

你真的需要分析它,因为这些可以真正发展到处理和caching。 内存量越大,负载越大,工作进程越高。 当人们询问有关configuration应用程序池时,他们通常会问这些数字应该是什么。 你在这里做的是显式地限制应用程序池消耗更多的内存。 注意这个设置在回收标签上,这是有原因的。

当应用程序池达到最大时,它不像最大处理器设置。 它会循环工作进程,就像一个微小的重启或类似于iisreset,但不是因为有时我们希望这种情况发生,所以我们可以释放我们的记忆。 在一个理想的世界里,你真的不想每24小时循环几次。 我听说有些人在上午发生高峰之前试图循环,因此他们拥有最多的可用内存,然后在备份或爬行开始之前的一天结束时进行循环。

根据我的经验, 800 MB是32位机器(2-4 GB RAM)的阈值。 在抛出“内存不足”exception之前,它会回收应用程序池。

确保您没有在应用程序池上设置虚拟内存大小。 如果将此值设置为允许范围以外的数字,则将恢复为512MB。 请参阅KB923197 。

另外请注意,如果您正在运行ASP.Net应用程序,则ASP.Net将以2GB内存限制的60%(即1.2 GB)回收该池。 这不是你的〜500的情况,但是对于大内存使用的32位应用程序,我们有时会用这个来获得更多的内存。

<system.web> <processModel memoryLimit="80" /> </system.web> 

在Windows 2003上,您可以设置Physical Allocation Extension (PAE)以使用所有内存。 IIS6应用程序池的默认内存为5MB 。