Windows Defender 更新触发IIS应用程序池回收故障

1. 背景

9月14日凌晨00:10左右,发现服务器IIS站点不可用。经过查询,看到 World Wide Web Publishing Service (W3SVC)Web Deployment Agent Service 异常停止,我们没有人为操作,要解决!

2. 排查

  • 系统重启: 检查系统日志,确认服务器在故障时间点前后没有发生重启。

  • 资源瓶颈: 调取监控系统数据,发现以下异常波动:

    • 磁盘性能: 磁盘Await(IO等待时间)与 Util%(利用率)出现显著峰值。

    • 网络流量: 外网入带宽存在约1Mbps的突发流量,内网出带宽亦有波动。

    • CPU/内存: 无剧烈波动,可排除计算资源瓶颈。

    • 部分监控图片:

      磁盘util%:

      外网入带宽:

初步结论: 可能是os内部进程密集型操作导致依赖磁盘IO的服务受到影响。

3. 分析

  • 系统日志分析: 在故障时间点,系统应用日志中记录有 KB2267602 成功安装的事件。但是Windows Update服务已禁用了呀!但更新仍然安装成功。
  • KB2267602 性质分析: 经微软官方文档确认,KB2267602是 Windows Defender 防病毒定义更新。此类更新旨在提供最新的病毒签名,其发布机制独立于常规Windows Update,由Defender服务自身定期从微软服务器拉取,频率通常为每日多次。
  • 故障分析:
    Windows Defender服务按计划下载并安装病毒定义更新(KB2267602),安装更新后,Windows Defender 反恶意软件服务 (MsMpEng.exe) 需要重启加载新定义,服务重启后,Windows Defender可能触发了扫描行为(或系统因更新而触发了快速扫描),导致磁盘I/O活动急剧增加。密集的磁盘扫描操作与IIS应用程序池的正常磁盘读写产生严重争用。 Windows Process Activation Service (WAS) 检测到应用程序池因磁盘IO或线程数压力过大而超限,出于保护系统的目的,强制回收了受影响的应用程序池,最终表现为IIS服务停止。

4. 解决

问题总要解决吧,原因已经清楚了,是Windows Defender的扫描活动与IIS服务的磁盘I/O操作发生冲突。因此最有效的方案是将业务关键路径添加到Defender的排除列表中,以避免不必要的扫描。

操作步骤(通过PowerShell执行):

  1. 添加排除路径:
    将IIS网站根目录、.NET编译临时目录等关键路径添加到Windows Defender的实时保护排除列表。
# 示例:添加排除路径
Set-MpPreference -ExclusionPath "C:\inetpub\wwwroot\"

这块需要根据实际环境替换或添加具体应用路径。

  1. 验证排除列表:
    执行以下命令确认排除路径已成功添加。
# 获取当前Defender配置并查看排除路径
$WDAVprefs = Get-MpPreference
$WDAVprefs.ExclusionPath

5. 建议:

  • 在生产服务器上,务必将为业务关键的目录(如IIS站点路径、应用程序数据目录、数据库文件路径等)添加到Windows Defender的排除列表中。
  • 了解Defender定义更新的频率,评估其与业务高峰期的重叠风险。虽然无法完全禁止更新,但可通过排除列表有效 mitigating (缓解)其影响。
  • 在监控系统中增加对MsMpEng.exe进程的磁盘IO和CPU使用率的告警,以便未来快速识别类似问题。

评论