You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在RapidFailProtection触发后自动重启IIS应用程序池?

IIS应用池触发快速失败保护后自动重启方案

针对网络故障导致应用池触发快速失败保护后停滞、无法自动恢复的问题,以下是几种标准解决方案:

方案1:修改IIS应用池内置失败策略

通过调整应用池进程模型配置,让触发快速失败保护后自动重启应用池(注:若应用持续崩溃会反复重启,适合故障能快速自愈的场景):

  1. 打开IIS管理器,定位目标应用池 → 右键选择「高级设置」
  2. 在「进程模型」区域,将「失败时操作」从默认的「终止」改为「重启」
  3. 也可通过appcmd命令批量配置(结合原有快速失败阈值):
appcmd set apppool "你的应用池名称" /failure.action:Restart /failure.rapidFailProtectionMaxCrashes:5 /failure.rapidFailProtectionInterval:00:05:00

方案2:Windows任务计划程序实现延迟重启

这是更灵活的方案,可设置触发快速失败后延迟指定时间(比如2小时)再重启,避免短时间内反复重启:

  1. 创建PowerShell脚本(如RestartAppPool.ps1):
Import-Module WebAdministration
$targetPool = "你的应用池名称"
if ((Get-WebAppPoolState -Name $targetPool).Value -eq "Stopped") {
    Start-WebAppPool -Name $targetPool
}
  1. 打开「任务计划程序」创建新任务:
    • 触发器:选择「事件日志」,日志选「系统」,来源选WAS,事件ID填5011(该事件对应应用池因快速失败保护停止)
    • 操作:启动程序,选择powershell.exe,参数填-ExecutionPolicy Bypass -File "C:\脚本存放路径\RestartAppPool.ps1"
    • 条件:设置「延迟任务时间」为2小时(按需调整)
    • 设置:勾选「允许任务在按需运行时执行」,可选配置任务失败后的重试规则

方案3:自定义指数退避重启(进阶)

若需要实现指数退避逻辑(如第一次10分钟重启,第二次30分钟,最高不超过2小时),可修改PowerShell脚本加入次数统计和延迟计算:

Import-Module WebAdministration
$targetPool = "你的应用池名称"
$logFile = "C:\Logs\AppPoolRestartLog.txt"
$currentState = (Get-WebAppPoolState -Name $targetPool).Value

if ($currentState -eq "Stopped") {
    # 读取历史重启次数
    $restartCount = if (Test-Path $logFile) { [int](Get-Content $logFile -Tail 1) } else { 0 }
    # 计算延迟时间,指数退避且上限120分钟
    $delayMinutes = [Math]::Min(10 * [Math]::Pow(2, $restartCount), 120)
    Start-Sleep -Minutes $delayMinutes
    Start-WebAppPool -Name $targetPool
    # 更新重启计数日志
    ($restartCount + 1) | Out-File $logFile -Append
}

将该脚本配置到任务计划程序,触发逻辑同方案2即可。

注意事项

  • 确保执行脚本的账户拥有操作IIS应用池的权限(建议使用本地管理员账户)
  • 可在「事件查看器」→「系统日志」中验证WAS来源的5011事件是否正常触发

内容的提问来源于stack exchange,提问作者Brondahl

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 19:42:39