跳转到内容

Windows 上的健康检查与进程守护

核验于 1 分钟阅读

区分 liveness/readiness,守护 Node/Python/Go 服务,并调 IIS 应用池 ping/快速失败而不制造崩溃循环。

测试环境Standard / Datacenter · 版本号 26100.33650 · x64
E1
版本号
26100.33650
版本
Standard / Datacenter
架构
x64
支持
文档(E1)
证据
E1官方文档
核验日期
2026-10-29
页面类型
任务

两种检查:

  • Liveness — 进程活着吗?挂了就重启。
  • Readiness — 能服务吗?不能就从代理摘掉。

不要一个端点干两件事。readiness 查数据库,DB 故障时会失败并触发重启循环,越搞越糟。

  • /healthz — 进程活着,不查依赖;便宜。
  • /readyz — 能服务:DB/缓存/存储,短超时;不 ready 返回 503。
  • 不要公开内部细节(版本、连接串);限制 localhost/代理。
  • Ping:PingEnabled、PingInterval(默认 30 秒)、PingResponseTime。
  • 快速失败保护:RapidFailProtection、RapidFailProtectionMaxCrashes(默认 5 分钟内 5 次)。触发后池停止——是安全阀,但也意味着“修好前一直down”。
  • 启动模式:OnDemand vs AlwaysRunning;延迟敏感站点用 AlwaysRunning + preload。
  • 空闲超时:关掉能保温,但会掩盖泄漏;要监控。
终端窗口
Get-ItemProperty IIS:\AppPools\apppool | Select-Object name,startMode,processModel
  • NSSM/WinSW onfailure restart 加延迟(10 秒+),不要瞬间循环。
  • 设重启节流/上限,永久坏的应用别无限转。
  • 记录退出码;无理由重启不是修复。
  • Nginx 开源版:被动检查(max_fails、fail_timeout);主动检查是 NGINX Plus。
  • ARR 农场:健康测试路径 + 间隔。
  • 失败节点摘出轮转;连续失败告警。
终端窗口
curl.exe -I http://127.0.0.1:3000/healthz
curl.exe -I http://127.0.0.1:3000/readyz
Get-IISAppPool apppool | Select-Object Name,State
Get-WinEvent -LogName Application -MaxEvents 20 | Where-Object ProviderName -match 'Application Error'

E1。实验室没有配应用池 ping/快速失败或看门狗;设置是 Server 2025 的生产设计。

来源