w3wp.exe 占用内存

the*_*bit 8 iis asp.net application-pools windows-sbs-2011

在 Small Business Server 2011 安装中,整个 w3wp.exe 进程似乎使用了不成比例的大量内存。SBS 开箱即用的安装共有 7 个站点和 20 个 ASP.NET 应用程序池(Sharepoint、Exchange、WSUS 和 SBS 特定的东西,如远程工作网站)。

随着时间的推移,产生的十几个 w3wp.exe 进程往往会消耗超过 4 GB 的服务器内存,峰值应用程序池是属于 WSUS 的应用程序池,工作集中大约有 800 MB。通过 IIS MMC 手动回收应用程序池有助于暂时减少内存使用量(w3wp.exe 进程缩小到 10 MB,其中一些进程会快速增长),但显然不是管理员想要整天做的事情。我找不到关于自动回收 SBS 预安装应用程序池的任何建议,所以我有点不愿意在生产系统上“就这样做”。

我在网上关于如何限制这种情况的研究只抛出了一些帖子,指出 w3wp 内存消耗不会损害但会提高性能,因为内存将“在其他应用程序需要时释放”。问题是它不起作用:

  • 首先,SBS 是一个多角色服务器,其中一个角色(主要角色)是 CIFS 网络存储,它极大地受益于文件系统缓存,它再次依赖于“空闲”的内存,如“任何其他进程都不会使用”方式”- ASP.NET 应用程序池几乎看不到用户并占用内存会适得其反
  • 另一件事是,我仍然必须看到 w3wp 实例内存消耗在内存不足时大幅减少 - 我看到的是显着少于 100 mb 的小幅减少和过度交换 - 再次损害了性能

我几乎从不管理 IIS 或 ASP.NET 应用程序,因此欢迎任何有关如何有效调整应用程序池的内存要求的想法。

The*_*Wiz 7

欢迎来到 SBS 的精彩世界。RAM 的推荐要求 = 10GB...并且它至少需要 8GB。(根据微软的说法。)有充分的理由。它不是一台经过微调、润滑良好的机器……它非常草率、臃肿,并且将阳光下的一切捆绑在一起。你可以在那个盒子里扔的内存越多......越好。不幸的是,您最多只能使用 32GB。恕我直言……是愚蠢的。


the*_*bit 7

这就是我最终做的:

通过设置在所述privateBytesLimit参数设置为.NET AppPools为较低的值(5 MB)服务器应用程序的高速缓存web.config%WINDIR%\Microsoft.NET\Framework\<version>\Config如建议此答案

    <configuration>
      <system.web>
         <caching>
           <cache privateBytesLimit="5242880" privateBytesPollTime="00:01:00" />
         </caching>
      </system.web>
    </configuration>
Run Code Online (Sandbox Code Playgroud)

这有助于使用默认池回收设置将内存使用量减少到 1 GB 以上。

显然,使用“服务器”类型的垃圾收集器 ( <gcServer = "true">)也会导致大量内存消耗,但看起来<gcServer>默认设置为 false。


Gre*_*kew 6

如果您怀疑由此产生的内存消耗是由于软件缺陷导致的问题,您可以使用 Microsoft DebugDiag 1.2 创建完整的内存转储并分析转储中的常见问题。如果您认为可能存在内存问题,则需要通过选择“监控泄漏”选项来启用泄漏跟踪,并在创建/分析转储之前让它运行一段时间。

DebugDiag 1.2 下载
https://www.microsoft.com/download/en/details.aspx?id=26798

在此处输入图片说明

在此处输入图片说明

在此处输入图片说明