Windows Server 2012 内存限制上的 IIS 工作进程

Moh*_*oub 5 c# asp.net iis

我有一个在 IIS 上运行的 ASP.NET 4.0 应用程序,该应用程序托管在Windows Server 2012 下,总物理内存为 8 GB。

我注意到随着用户登录应用程序并执行任务,IIS 工作进程的大小显着增加。

我真的不知道如何设置这个应用程序以避免内存中断或应用程序崩溃。

我的问题是,IIS 工作进程在具有 8GB RAM的Windows Server 2012上可以达到的最大大小是多少?

您建议我以32 位模式还是64 位模式运行应用程序池?

您是否建议我使用Web Gardening(增加 IIS 工作进程的数量)?使用此选项有什么副作用?

Ale*_*xei 9

这个问题很广泛,但我认为可以部分回答。

  1. 可能的内存泄漏- 如果 w3wp 进程内存(提交大小或内存)继续增加,即使用户数量不再增加,那么您可能会泄漏内存。检查此问题以获取更多详细信息

  2. 应用程序池内存限制- 可以为每个应用程序池配置工作进程的最大允许内存 -> 回收条件 -> 基于内存的最大值。当达到这个内存限制时,应用程序池被回收(发送一个关闭事件并在Shutdown Limit之后执行实际关闭(默认90秒))

  3. 没有应用程序池内存限制- 在这种情况下,我认为限制将取决于 .NET 进程可以在您的特定体系结构上分配多少内存。使用此处的信息,在您的特定情况下,内存限制应为 RAM + Pagefile 的 70%

但是,如果内存使用率很高,您还应该考虑以下几点:

  • 垃圾回收——当内存使用率很高,GC介入,拼命回收内存时,应用程序性能可能会大幅下降
  • 内存消耗并发- 如果您有其他需要大量内存的进程(例如报告服务器),您应该考虑为您的应用程序池明确设置内存上限
  • 如何检查应用程序池是否因内存限制而关闭- 不完全确定,但我认为该HostingEnvironment值是作为应用程序池因内存最大达到而被回收的原因发送的。检查此答案以了解如何连接应用程序中的内容以捕获应用程序池关闭启动。