代码之家  ›  专栏  ›  技术社区  ›  Daniel Schaffer

IIS应用程序池-停止/启动vs回收

  •  32
  • Daniel Schaffer  · 技术社区  · 16 年前

    我注意到,在我的一个生产Web应用程序上,当我手动回收应用程序池时,基于在“任务管理器”中观察,回收的工作进程可能需要60多秒才能完全销毁。但是,如果我完全停止应用程序池,工作进程几乎会在瞬间消失——在1-2秒内。

    所以,我的问题是双重的:

    a)当应用程序池被回收而不是停止时,为什么要花这么长时间来破坏进程(更重要的是,释放它使用/锁定的资源);以及

    b)假设我已经阻止了流量被引导到服务器,是否有任何理由不停止/启动而不是循环使用?


    编辑:
    为了澄清,在我回收或停止应用程序池之前,我会停止将流量发送到相关服务器(服务器位于负载平衡集群中,我将服务器从负载均衡器中删除)。因此,理论上,在我对应用程序池做任何事情的时候,不应该有任何请求进入网站。


    编辑部分DEUX:
    在阅读了iGal的链接之后,我觉得很明显发生了什么。当我回收应用程序池时,新的进程将启动,但由于根本没有流量,因此它不会将新进程注册为正常运行,因此直到超时(90秒)后才会关闭旧进程。

    有了这些知识,我很清楚“回收”功能专门用于在活动服务器上的中游,而且由于我预先手动排出流量,所以我应该使用停止/启动。

    3 回复  |  直到 7 年前
        1
  •  25
  •   Igal Serban    16 年前

    a)因为 Overlapped Recycling . “旧”进程有一段时间等待新进程启动。

    不,据我所知。

        2
  •  13
  •   Mitchel Sellers    16 年前

    回收如果我正确调用,则允许所有现有请求完成,然后它将回收应用程序池。停下来就是在你停下来的那一刻结束它。

        3
  •  0
  •   natenho    7 年前

    根据 this link ,

    停止 _“通过停止应用程序池,您将指示为此应用程序池提供服务的所有IIS工作进程关闭, 并防止任何额外的工作进程在 应用程序池再次启动。 这就启动了一个优雅的 关闭工作进程,每个工作进程都尝试 删除所有IT请求,然后退出。

    如果工作进程未在指定的时间内退出 通过ProcessModel中的ShutdownTimeLimit配置属性 每个应用程序池的定义(默认值:90秒)的元素是 将强制终止它(如果本机调试器 附上)。

    因此,停止应用程序池是一种破坏性操作, 导致卸载ASP.NET应用程序域、FastCGI子进程, 以及任何进程内应用状态的丢失。

    回收 _“回收应用程序池会使该应用程序池中当前运行的所有IIS工作进程正常运行。 关闭,但与停止池不同,新的IIS工作进程可以 按需启动以处理后续请求。

    回收应用程序池是导致重置 应用程序状态和由IIS工作进程缓存的任何配置 无法自动刷新的进程(主要是全局进程) 注册表项),而不会中断服务器的操作。这个 使回收应用程序池成为 在大多数情况下。