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


8

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

我意识到,使用x86,服务器将无法利用所有4GB RAM,并且应用程序空间也受到限制,但是IIS进程似乎在其他地方受到限制。w3wp.exe从未分配超过500MB的内存,有时我会从繁忙的.NET应用程序中获取OutOfMemory异常(有几个正在运行的应用程序,每个应用程序都有一个单独的应用程序池)。

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

Answers:


7

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

还有许多其他相关问题:

  • 您的事件日志中是否记录了错误?
  • 是抛出异常的特定代码行吗?如果是这样,此OutOfMemory异常实际上是IIS问题还是代码问题?
  • 您是否通过Recyling设置完全限制了应用程序池?
  • 此计算机上是否还有其他服务在运行?

即使Windows Task Manager未显示,IIS,ASP.NET及其所有相关包很可能都超出2GB的限制。设置回收限制或升级到x64可能会有很大的不同。


3

偶尔会从繁忙的.NET应用程序获取OutOfMemory异常

答案太复杂而无法满足答案。有关该主题的完整处理,请参见调整.NET应用程序性能

这是来自Bruno Jouhier的大大简化(但仍然相当不错)的摘要:

此外,.NET运行时不允许您增加到2 GB。垃圾收集器通过复制活动对象来工作,因此需要大量空间来执行其复制。

编辑:

这是我的一个解释尝试...

如果您想知道x86上的ASP.NET辅助进程的最大辅助进程内存大小(由任务管理器报告),答案是“取决于”

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

特别是对于ASP.NET,垃圾收集器在与网站相同的工作进程中运行。GC消耗自己的内存。如何多少内存完全是你的应用程序的代码是如何写的功能。一个应用程序可能可以使用1.8GB的内存,而另一个应用程序可能占用500MB的内存。为了理解为什么,您需要分析您的特定应用程序。


我同意调试OutOfMemory异常很复杂-感谢您的链接。但是,我要问的是如何限制内存,应该可以回答。
罗宾M 2009年

2

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


是的,但是我要处理一个2GB的存储空间吗?
罗宾M 2009年

2

从此博客文章“ 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)的门槛。它在抛出“内存不足”异常之前回收应用程序池。


2

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

还要注意,如果您正在运行ASP.Net应用程序,则ASP.Net将以2GB内存限制(即1.2 GB)的60%回收池。这不是您的约500个方案,但是在内存使用量大的32位应用程序池中,有时我们会花一些时间来获得更多的内存。

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

1

在Windows 2003上,您可以将物理分配扩展(PAE)设置为使用所有内存。IIS6应用程序池的默认内存为5MB


好的,但这不能解释为什么进程限制为500MB。应用程序池的默认内存很有趣,但并不是真正相关或有用,对不起!
罗宾M 2009年

您是否在同一个盒子上运行SQL?

否。SQL不在同一框中。仅限使用IIS的web / ftp / smtp。
罗宾M 2009年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.