三类使用率的共同套路
主机使用率查询有两个固定要点:CPU 用空闲时间反向计算,内存用可用量口径,磁盘要先过滤伪文件系统再按挂载点分组。掌握这三条就能覆盖绝大多数主机容量判断,也能避免把缓存与伪设备算进使用率。
CPU 为什么要用空闲时间反推
CPU 时间是一组按模式累计的计数器,直接相加不代表使用率。把各模式相加后用总量减去空闲比例,得到的才是非空闲占比,也就是通常说的使用率。按实例聚合时记得保留 cpu 维度与否会导致两种完全不同的视角:整体水位与单核热点。
内存口径的差异
Linux 会把大量空闲内存用于页缓存,因此空闲内存少并不代表压力大。判断内存是否吃紧应看可用内存,它已经扣除了不可回收的部分;同时结合交换分区换入换出速率判断是否已经开始置换,一旦出现持续置换,延迟通常会同步恶化。
基本信息
| CPU 查询 | 用 1 减去 idle 模式占比 |
|---|---|
| 内存查询 | 可用内存除以总内存 |
| 磁盘查询 | 可用空间除以总空间,并过滤伪文件系统 |
| 窗口建议 | 至少覆盖 4 个采样点,抓取间隔调大时同步放宽 |
典型使用场景
- 容量看板:三类使用率的趋势线是扩容决策的主要依据
- 水位告警:文件系统与内存使用率越过阈值时触发通知
- 故障定位:CPU 高伴随负载高通常是计算密集,内存高伴随置换则是容量不足
- 发布对比:发布前后比较同一主机的资源曲线,判断新版本开销
- 批量巡检:按集群聚合出整体水位,快速找出最紧张的一批机器
三类使用率查询
三类使用率查询
# CPU 使用率(按实例聚合,5 分钟窗口)
100 - (avg by (instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)
# 内存使用率(可用内存口径)
(1 - node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes) * 100
# 文件系统使用率(过滤 tmpfs 等伪文件系统)
(1 - node_filesystem_avail_bytes{fstype!~"tmpfs|overlay|squashfs"}
/ node_filesystem_size_bytes{fstype!~"tmpfs|overlay|squashfs"}) * 100单核视角与交换活动
单核视角与交换活动
# 单核使用率:保留 cpu 维度
100 - (rate(node_cpu_seconds_total{mode="idle"}[5m]) * 100)
# 交换活动:出现持续置换说明内存已经不足
rate(node_vmstat_pswpin[5m])
rate(node_vmstat_pswpout[5m])输出与异常判读
| 指标 | 正常表现 | 异常信号 |
|---|---|---|
| CPU 使用率 | 平稳波动,峰值可解释 | 持续高位且延迟同步上升 |
| 内存使用率 | 受页缓存影响有小幅波动 | 可用量持续下降并伴随置换 |
| 文件系统使用率 | 增长缓慢可预测 | 短期快速攀升或个别挂载点先满 |
| 系统负载 | 不超过核心数量级 | 远超核心数且回落缓慢 |
从使用率到结论
使用率只是入口,结论要结合饱和度:CPU 使用率高但负载未超过核心数,通常只是繁忙;磁盘使用率高而 IO 等待正常,说明容量尚有余量;内存使用率高但可用量稳定,则无需处理。把使用率与饱和信号放在同一张面板上,能显著减少误判。
按实例聚合用平均,观察单核差异时去掉模式过滤并按 cpu 维度分组,两种视角分别回答整体水位与热点问题。
使用率阈值不要照搬:数据库与编译节点长期高位运行属于常态,阈值应结合自身基线与业务容忍度设定,而不是统一取 80%。
容器场景要区分容器可见的主机指标与容器自身配额:以容器方式运行的采集器若未做处理,会把整个节点的负载算到单个容器上。