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

Azure实例健康判定逻辑及CPU密集型任务场景下健康检查配置

Azure负载均衡器健康检查误判问题解决指南

一、健康检查是否会误判?

是的,配置不当的话确实会误判。原因如下:

  • 若用TCP端口检查:只要实例的端口还能监听并响应SYN包,一般不会被判定不健康;但CPU满载导致TCP栈无法及时处理检查请求时,就可能触发失败。
  • 若用HTTP/HTTPS检查:如果健康检查端点需要应用进程处理,CPU占满会导致端点超时无响应,直接被标记为不健康并移除。

核心矛盾是默认健康检查只看「能否响应检查请求」,不区分「正在忙的健康实例」和「真挂了的实例」。

二、确保仅移除真不健康实例的方案

1. 调整健康检查规则

  • 优先用TCP端口检查:TCP检查只验证端口监听状态,不依赖应用逻辑,只要实例网络栈正常,哪怕CPU跑满也不会误判。
  • 放宽检查阈值:把响应超时从默认2秒调至10秒,失败重试次数从3次增至5次,给高负载实例足够的响应缓冲时间。
  • 做轻量HTTP健康端点:如果必须用HTTP检查,单独写一个极简的/health端点,只返回200 OK,不涉及任何业务计算,确保CPU再忙也能快速响应这个请求。

2. 实例侧主动维护健康状态

  • 在实例里加状态标记:用本地文件或内存变量记录「是否在处理长任务」,健康端点读取这个标记,只要实例能响应且标记正常,就返回健康,无视CPU负载。
  • 资源隔离:给长任务分配固定CPU核心,预留核心给健康检查进程和网络栈,避免健康检查因资源耗尽无响应。

三、更新后的PowerShell脚本(中文注释)

# 定义待检查的实例列表
$instances = @("instance1.example.com", "instance2.example.com", "instance3.example.com")

# 遍历每个实例执行健康检查
foreach ($instance in $instances) {
    # 测试实例80端口的连通性,仅返回布尔结果(成功/失败)
    $result = Test-NetConnection -ComputerName $instance -Port 80 -InformationLevel Quiet

    # 若端口无响应,输出提示信息
    if (!$result) {
        Write-Host "实例 $instance 无响应。"
        # 可在此扩展操作,比如发送告警通知或触发故障转移流程
    }
}

脚本优化建议

  • 加重试机制:第一次检测失败后,间隔3-5秒重试1-2次,排除瞬时负载过高导致的误判。
  • 结合CPU负载检测:用Get-Counter获取实例CPU使用率,只有当端口无响应且CPU持续100%超过5分钟时,才判定为不健康。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 01:20:34