Windows 上的健康检查与进程守护
区分 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/代理。
IIS 应用池
Section titled “IIS 应用池”- Ping:
PingEnabled、PingInterval(默认 30 秒)、PingResponseTime。 - 快速失败保护:
RapidFailProtection、RapidFailProtectionMaxCrashes(默认 5 分钟内 5 次)。触发后池停止——是安全阀,但也意味着“修好前一直down”。 - 启动模式:
OnDemandvsAlwaysRunning;延迟敏感站点用AlwaysRunning+ preload。 - 空闲超时:关掉能保温,但会掩盖泄漏;要监控。
Get-ItemProperty IIS:\AppPools\apppool | Select-Object name,startMode,processModelWindows 服务
Section titled “Windows 服务”- NSSM/WinSW
onfailure restart加延迟(10 秒+),不要瞬间循环。 - 设重启节流/上限,永久坏的应用别无限转。
- 记录退出码;无理由重启不是修复。
- Nginx 开源版:被动检查(
max_fails、fail_timeout);主动检查是 NGINX Plus。 - ARR 农场:健康测试路径 + 间隔。
- 失败节点摘出轮转;连续失败告警。
curl.exe -I http://127.0.0.1:3000/healthzcurl.exe -I http://127.0.0.1:3000/readyzGet-IISAppPool apppool | Select-Object Name,StateGet-WinEvent -LogName Application -MaxEvents 20 | Where-Object ProviderName -match 'Application Error'E1。实验室没有配应用池 ping/快速失败或看门狗;设置是 Server 2025 的生产设计。