在 Windows Server 2003 Web 上运行 IIS 6。
我们有一些泄漏内存的第 3 方组件,因此我们安排了定期作业来重新启动 IIS。这些工作只是简单地调用iisrestart /reset
似乎可以完成工作......但它确实会生成一大堆事件日志事件——包括 3 个错误和一个警告。也许我们做错了?
是否有一种“更清洁”的方式来回收 IIS 进程,而不会让 Windows 对我们感到不满?随着我们监控的改进,prod 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 远程管理服务已成功发送启动控制
您是否在工作进程隔离模式下运行 IIS?如果是这样,更好的解决方案是使用应用程序池回收功能。您可以将有问题的应用程序放入它自己的池中,然后根据各种条件(每 X 分钟,或者当内存使用量达到 Y 兆字节,或者当您对应用程序有 Z 个请求时等)重新启动它的进程。
http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/003ed2fe-6339-4919-b577-6aa965994a9b.mspx?mfr=true
MattB 的答案是最好的(IMO),另一种选择是终止应用程序池进程。
这需要更多的工作,因为您必须:
但是,这不会回收整个 IIS 服务(这是在您的日志中生成消息的内容)。