我注意到,在我的一个生产 Web 应用程序中,当我手动回收应用程序池时,根据在任务管理器中的观察,回收的工作进程实际上可能需要 60 多秒才能完全销毁。但是,如果我完全停止应用程序池,工作进程几乎会立即消失 - 在 1-2 秒内。
所以,我的问题有两个:
a) 当应用程序池被回收而不是停止时,为什么销毁进程需要这么长时间(更有意义的是释放它使用/锁定的资源);和
b)假设我已经停止将流量定向到服务器,是否有任何理由不停止/启动而不是回收?
编辑:
为了澄清,在我回收或停止应用程序池之前,我停止将流量发送到有问题的服务器(服务器位于负载平衡集群中,我从负载平衡器中删除了服务器)。因此,理论上,当我对应用程序池执行任何操作时,应该没有请求进入网站。
Edit Part Deux:
在阅读了 Igal 的链接后,对我来说发生了什么似乎很明显。当我回收应用程序池时,新进程启动,但由于根本没有流量,它没有将新进程注册为正在运行,所以它不会关闭旧进程,直到超时(即 90秒)。
有了这些知识,我很清楚“回收”功能专门用于在实时服务器上的中游,并且由于我事先手动排出流量,因此我应该使用停止/启动。