Azure应用自动缩放场景下,CPU达90%时如何自动重启单个实例?
Azure App Autoscale 问题解决方案
一、实现单个实例CPU达90%时自动重启
方法1:Azure Monitor警报 + 自动化Runbook
- 创建Azure Monitor指标警报:
- 目标资源选择你的App Service计划
- 指标选择CPU百分比,维度勾选实例,聚合方式设为平均值,阈值设置为90%
- 触发条件设为「连续5分钟超过阈值」(可根据业务实际调整时长)
- 编写PowerShell Runbook(需在Azure自动化账户中创建):
param( [Parameter(Mandatory=$true)] [string]$ResourceGroupName, [Parameter(Mandatory=$true)] [string]$WebAppName, [Parameter(Mandatory=$true)] [string]$InstanceName ) # 使用托管身份连接Azure Connect-AzAccount -Identity # 重启指定实例 Restart-AzWebAppSlot -ResourceGroupName $ResourceGroupName -Name $WebAppName -Slot $InstanceName - 配置警报动作:将警报关联到上述Runbook,传递资源组、应用名称和触发警报的实例名称参数,触发后自动重启高负载实例。
方法2:自定义健康检查触发重启
修改应用的健康检查端点逻辑,当当前实例CPU使用率持续高于90%时,返回5xx状态码。App Service会识别该实例为不健康,自动触发重启操作。
二、资源分配优化方案
- 关闭ARR粘性会话:
如果你的App Service启用了粘性会话,用户请求会被固定路由到某一个实例(即你提到的YX后缀主实例),导致该实例持续过载。若业务不依赖会话粘性,建议直接关闭该配置,让流量均匀分配到所有实例。 - 调整自动缩放规则:
当前基于平均CPU的扩容规则无法识别单个实例过载的情况,建议:- 添加实例级缩放规则:当任意单个实例CPU超过80%时触发扩容
- 将缩放指标从平均CPU改为最大CPU,确保高负载实例能触发扩容动作
- 排查主实例过载根源:
结合你提供的实例级CPU统计图表,检查主实例是否存在内存泄漏、进程死锁,或是有定时任务/后台任务仅在主实例运行的情况。这类单实例负载可迁移到Azure Functions或独立的计算服务,避免占用主实例资源。 - 升级实例规格:
如果单实例的资源规格(如CPU、内存)不足以承载负载,可升级App Service计划的实例层级(例如从B系列升级到D系列),提升单实例的处理能力。
内容的提问来源于stack exchange,提问作者default
相关产品推荐
相关产品推荐

