在Small Business Server 2011安装中,整个w3wp.exe进程似乎在使用不成比例的大量内存。 SBS开箱即用安装共有7个站点和20个ASP.NET应用程序池(Sharepoint,Exchange,WSUS和SBS特定的东西,如Remote Web Workplace)。
由此产生的十三个w3wp.exe进程往往耗费超过4 GB的服务器的内存随着时间的推移,高峰应用程序池是属于WSUS,在工作集约800 MB的。 通过IIS MMC手动回收应用程序池有助于暂时减less内存使用量(w3wp.exe进程缩减至10 MB,其中一些快速重新生成),但显然不是pipe理员想要整天执行的操作。 我无法find有关SBS预装的应用程序池自动回收的任何build议,所以我不太愿意在生产系统上“只是这样做”。
我在网上关于如何限制这个问题的研究只是抛出了一些post,指出w3wp的内存消耗不会伤害,但是会提高性能,因为内存将在“其他应用程序需要时释放”。 麻烦的是,它不工作:
我很lesspipe理IIS或ASP.NET应用程序,因此有关如何有效减less应用程序池的内存需求的任何想法都是受欢迎的。
欢迎来到SBS的美妙世界。 对于RAM = 10GB的build议要求…并且要求至less8GB。 ( 根据微软 )有一个很好的理由。 这不是一个经过精心调整的润滑油机器,它非常马虎,臃肿,并且把太阳下的一切都捆绑在一起。 你可以在这个盒子里扔的内存越多越好。 不幸的是,你最多只限于32GB。 哪个imho是愚蠢的。
如果您怀疑由于软件缺陷导致的内存消耗问题,则可以使用Microsoft DebugDiag 1.2创build完整的内存转储并分析转储以查找常见问题。 如果您认为可能存在内存问题,则需要通过select“Monitor for Leaks”选项来启用泄漏跟踪,并在创build/分析转储之前运行一段时间。
DebugDiag 1.2下载
https://www.microsoft.com/download/en/details.aspx?id=26798



这就是我最终做的事情:
通过在%WINDIR%\Microsoft.NET\Framework\<version>\Config设置web.config中的privateBytesLimit参数,将.NET AppPools的服务器应用程序caching设置为较低的值(5 MB)
<configuration> <system.web> <caching> <cache privateBytesLimit="5242880" privateBytesPollTime="00:01:00" /> </caching> </system.web> </configuration>
这有助于将默认池回收设置的内存使用量减less到1 GB以上。
显然,使用“服务器”types的垃圾收集器( <gcServer = "true"> ) 也会导致大量的内存消耗 ,但是看起来,默认情况下<gcServer>设置为false。
你不需要为每个应用程序单独的应用程序池,只是那些不可靠或你想优先考虑的应用程序池。 许多人可以分享(保持不同的.net版本分开)。 然后,您可以更真实地限制应用程序池将使用的内存。 应该不需要每天多次重复循环池。
而且,只有这么多的记忆才能以这种方式被释放出来。 虽然有些应用程序将caching,每个应用程序需要一定的工作内存,这是高度依赖于特定的Web应用程序。 试图限制这个太多会使事情停滞不前。
问题的实质是SBS试图一次做得太多,你需要看看你实际使用的是什么,并关掉你不需要的东西。
但说实话只有11个用户,剩下的内存在哪里呢? 交换和SQL使用光肯定不需要超过12Gb!