重新启动 IIS 的“友好”方法是什么?

重新启动 IIS 的“友好”方法是什么?

在 Windows Server 2003 Web 上运行 IIS 6。

我们有一些第三方组件会泄漏内存,因此我们安排了定期作业来重新启动 IIS。这些作业只是简单地调用,iisrestart /reset似乎可以完成工作……但它确实会生成一大堆事件日志事件——包括 3 个错误和一个警告。也许我们做错了?

有没有一种“更干净”的方法来回收 IIS 进程,而不会让 Windows 对我们感到不满?随着我们监控的改进,生产 Web 服务器上的错误事件会造成不必要的干扰。


对于那些好奇的人来说,事件“周期”是这样的(为了简洁起见,我略微删减了描述文字)。这些都发生在 1 - 2 秒的时间内:

警告- WinRM - ID 10149 - WinRM 服务未监听 WS-Management 请求

信息 - IISCTLS - ID 6 - IIS 重置在停止服务时遇到错误

信息 - 服务控制管理器 - ID 7035 - SMTP 服务已成功发送停止控制

信息 - 服务控制管理器 - ID 7035 - Windows 远程管理服务成功发送停止控制

信息 - 服务控制管理器 - ID 7036 - Windows 远程管理进入停止状态

错误- 服务控制管理器 - ID 7034 - 万维网发布服务意外终止。此情况已发生 x 次

错误- 服务控制管理器 - ID 7034 - IIS 管理服务意外终止

错误- 服务控制管理器 - ID 7034 - SMTP 服务意外终止

信息 - IISCTLS -ID 4 - 从用户收到 IIS 终止命令。

信息 - IISCTLS - ID 2 - 从用户收到 IIS 停止命令。

信息 - 服务控制管理器 - ID 7035 - IIS Admin Service 服务已成功发送启动控制

信息 - 服务控制管理器 - ID 7035 - 万维网发布服务服务已成功发送启动控制

信息 - 服务控制管理器 - ID 7035 - SMTP 服务已成功发送启动控制

信息 - 服务控制管理器 - ID 7035 - Windows 远程管理服务已成功发送启动控制

答案1

您是否在工作进程隔离模式下运行 IIS?如果是这样,更好的解决方案是使用应用程序池回收功能。您可以将有问题的应用程序放入其自己的池中,然后根据各种条件(每 X 分钟,或当内存使用量达到 Y 兆字节时,或当您对该应用程序有 Z 个请求时等)仅重新启动其进程。

http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/003ed2fe-6339-4919-b577-6aa965994a9b.mspx?mfr=true

答案2

MattB 的答案是最好的(IMO),另一个选择是终止应用程序池进程。

这需要做更多的工作,因为你必须:

  1. 确定您要终止的应用程序池的 PID。
  2. 杀死 PID

但是,这不会回收整个 IIS 服务(这正是生成日志中的消息的原因)。

相关内容