【问题标题】:Will IIS recycle application pool if web application has pending long-running request?如果 Web 应用程序有待处理的长时间运行请求,IIS 会回收应用程序池吗?
【发布时间】:2012-07-19 08:58:57
【问题描述】:

简介

我正在使用面向 IIS 7.0+ 的 ASP.NET MVC 3、C# 开发 Web 应用程序。我们有许多长时间运行的异步请求(利用 AsyncController/Async 操作功能)。我也经常使用 HttpRuntime.Cache(并且以某种非标准的方式在这里并不重要)。

问题

如果存在活动的长时间运行的请求,是否可以突然回收 IIS 应用程序池?如果可能,我想阻止这种行为,因为我不想丢失缓存中的数据。

我真的需要使用一些持久性存储(即数据库)来解决可能出现的问题吗?

【问题讨论】:

    标签: c# iis long-polling application-pool


    【解决方案1】:

    通常 IIS 不会回收由于处于不活动状态而有待处理请求的应用程序。但是,如果您达到内存或 CPU 阈值,IIS 可能会回收您的应用程序。但这是您可以在 IIS 管理控制台中配置的内容。

    【讨论】:

    • 谢谢!一个后续问题:有没有办法防止在达到负载阈值时进行此类回收?或者至少通过一些事件处理来跟踪它们,以便我可以将所有数据初步保存到持久存储并在回收后恢复它们?
    • 是的,我认为您可以在 IIS 管理控制台中的应用程序池配置的高级属性中禁用这些回收。
    【解决方案2】:

    触发回收时,“关闭时间限制”默认为 90 秒。这就是进程在强制关闭之前必须完成的时间。这可以通过 IIS 进行配置,除了删除不需要的回收触发器(内存、CPU、时间、计划、请求等)之外,您可能希望将其增加到一个较大的值

    【讨论】:

    • 感谢您的建议,但就我而言,这还不够,我的请求运行了几个小时。我是服务器所有者,并且永远都是(而且我确信我的代码质量),所以我刚刚禁用了定期回收。
    猜你喜欢
    • 2012-12-04
    • 2011-09-20
    • 1970-01-01
    • 1970-01-01
    • 2011-04-15
    • 2012-02-01
    • 1970-01-01
    • 2020-07-28
    • 1970-01-01
    相关资源
    最近更新 更多