如何计算Azure VM闲置CPU核心并实现成本节约?
如何查询Azure虚拟机总CPU核心数、已用核心数并识别闲置VM节约成本
一、获取VM总CPU核心数
方法1:Azure CLI
直接列出所有VM的规格及对应核心数:
# 列出所有VM的名称和VM规格 az vm list --query "[].{VM名称:name, VM规格:hardwareProfile.vmSize}" -o table # 查询指定区域内各VM规格的核心数 az vm list-sizes --location <你的Azure区域> --query "[].{规格名称:name, 总核心数:numberOfCores}" -o table
将两个结果对应,就能得到每台VM的总CPU核心数。
方法2:Azure Portal
进入目标VM的概览页面,在硬件配置区域查看VM规格,鼠标悬停在规格名称上会显示核心数,或者在大小页面查看详细参数。
二、获取已使用CPU核心数
已用核心数 = 总核心数 × 平均CPU使用率百分比,核心是获取VM的CPU使用率:
方法1:Azure CLI查询实时/历史CPU使用率
# 查询单台VM过去1小时的平均CPU使用率 az monitor metrics list --resource <VM的资源ID> --metric "Percentage CPU" --aggregation Average --interval PT1H --query "value[].average" -o tsv
拿到百分比后乘以总核心数,即可算出已用核心数。
方法2:Log Analytics批量查询多台VM
如果有大量VM,可以用Log Analytics的Kusto查询批量统计:
Perf | where ObjectName == "Processor" and CounterName == "% Processor Time" | summarize 平均CPU使用率 = avg(CounterValue) by Computer, bin(TimeGenerated, 7d) | join kind=inner ( // 这里可以提前导入VM规格与核心数的映射表,或者手动关联 datatable(Computer:string, 总核心数:int) [ "vm-01", 2, "vm-02", 4 ] ) on Computer | extend 已用核心数 = 总核心数 * (平均CPU使用率 / 100) | project Computer, 总核心数, 平均CPU使用率, 已用核心数
三、计算可用CPU核心数
直接通过公式计算:可用核心数 = 总核心数 - 已用核心数
通常如果可用核心数占总核心数的90%以上(即CPU使用率低于10%),可视为潜在闲置VM。
四、识别闲置VM
定义闲置标准(可根据业务调整):
- 连续7天平均CPU使用率低于5%
- 内存使用率持续低于10%
- 无网络流量或磁盘IO极低
批量识别方法(Log Analytics)
// 统计7天内VM的平均CPU、内存使用率 Perf | where ObjectName in ("Processor", "Memory") | where CounterName in ("% Processor Time", "% Used Memory") | summarize avgValue = avg(CounterValue) by Computer, ObjectName, bin(TimeGenerated, 7d) | pivot(ObjectName, any(avgValue)) | rename 平均CPU使用率 = "Processor_any_avgValue", 平均内存使用率 = "Memory_any_avgValue" | where 平均CPU使用率 < 5 and 平均内存使用率 < 10 | project Computer, 平均CPU使用率, 平均内存使用率
五、成本节约措施
- 调整VM规格:将闲置VM降级到匹配负载的小规格,比如从
Standard_D4s_v3(4核)改成Standard_D2s_v3(2核),CLI命令:az vm resize --resource-group <资源组名> --name <VM名称> --size <目标规格> - 解除分配闲置VM:长期不用的VM直接解除分配(停止仍会收取计算费用,解除分配仅收存储费):
az vm deallocate --resource-group <资源组名> --name <VM名称> - 启用自动启停:为非7×24运行的VM设置自动启停规则,比如工作日早8点启动,晚6点停止,可通过Azure Portal的VM自动启停功能配置。
- 替换为Spot VM:如果闲置VM运行的是可中断的工作负载(比如测试、批量处理),换成Azure Spot VM,成本最高可降低90%。
内容的提问来源于stack exchange,提问作者swadesh
相关产品推荐
相关产品推荐

