【问题标题】:IIS Worker Process on Windows Server 2012 Memory LimitWindows Server 2012 内存限制上的 IIS 工作进程
【发布时间】:2015-07-19 15:27:41
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

  • 您可以配置您的应用程序池以消耗任何可用内存。默认私有内存限制为 2GB。就像上面的 MatteoSp 所说,您需要进行手术修复内存饥饿的应用程序池,而不是为其提供更多内存。
  • 您使用哪些工具进行疑难解答asp.net 健康监测 ? IIS 工作进程获得内存限制时的任何事件?

标签: c# asp.net iis


【解决方案1】:

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

  1. 可能的内存泄漏 - 如果 w3wp 进程内存(提交大小或内存)继续增加,即使用户数量不再增加,您也可能会泄漏内存。更多详情请查看this question

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

  3. 没有应用程序池内存限制 - 在这种情况下,我认为限制将取决于 .NET 进程可以在您的特定架构上分配多少内存。使用来自here 的信息,在您的特定情况下,内存限制应为RAM + 页面文件的70%

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

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

【讨论】:

  • 根据 IIS 的版本,在应用程序池高级设置中有一个选项可以将回收事件及其原因记录到系统事件日志中...例如“为应用程序池 'APPOOLNAMEGOESHERE' 提供服务的工作进程已请求回收,因为它已达到其私有字节内存限制。”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-28
  • 2018-09-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多