3、PSI 指标分类详解:some 指标与 full 指标的区别、avg10/avg60/avg300 时间窗口含义
PSI(Pressure Stall Information)是 Linux 内核 4.20 引入的实时资源压力度量体系。要正确设定告警阈值,必须先理解 PSI 的两大分类维度:资源维度(some vs. full)和时间窗口维度(avg10 / avg60 / avg300)。
3.1 some 指标 vs. full 指标:资源压力的两种视角
PSI 为 CPU、内存、IO 三类资源分别输出 some 和 full 两个压力值。它们的核心区别在于:任务是否完全停滞。
| 指标 | 含义 | 典型场景 | 告警敏感度 |
|---|---|---|---|
| some | 至少有一个任务因资源不足而等待,但系统仍有其他任务在运行 | CPU 争抢、内存回收、IO 排队 | 中——表示资源开始紧张 |
| full | 所有可运行任务都在等待该资源,CPU 空转或完全阻塞 | 内存 OOM 边缘、IO 死锁、CPU 完全饱和 | 高——表示资源严重过载 |
关键认知:some 是“有人饿着”,full 是“全员饿着”。告警阈值设定时,full 指标通常应比 some 指标设置更低的阈值(更敏感),因为 full 状态对业务延迟的破坏性更大。
3.2 avg10 / avg60 / avg300:三个时间窗口的衰减平均
PSI 不直接输出瞬时值,而是使用指数加权移动平均(EWMA)计算三个时间窗口的压力百分比。每个指标后缀代表不同的衰减半衰期:
| 时间窗口 | 半衰期 | 敏感度 | 适用场景 |
|---|---|---|---|
| avg10 | 约 10 秒 | 高——反映瞬时抖动 | 突发流量、短时毛刺检测 |
| avg60 | 约 60 秒 | 中——反映短期趋势 | 常规告警、分钟级异常 |
| avg300 | 约 300 秒 | 低——反映长期基线 | 容量规划、慢速泄漏 |
实践要点:avg10 适合做“快速响应告警”,但容易误报;avg300 适合做“趋势分析”,但响应慢。推荐将 avg60 作为主要告警窗口,avg10 作为辅助确认,avg300 作为容量基线。
3.3 组合解读:some/full × 时间窗口
实际监控中,PSI 指标是 资源 × some/full × 时间窗口 的三维矩阵。以内存为例,内核输出如下 6 个值:
# cat /proc/pressure/memory
some avg10=2.34 avg60=1.89 avg300=1.45 total=12345678
full avg10=0.12 avg60=0.08 avg300=0.05 total=987654
解读规则:
- some avg10 > 10%:内存回收导致部分任务抖动,可能触发短时延迟。
- full avg10 > 1%:内存严重不足,大量任务被阻塞,需立即介入。
- some avg300 持续上升:内存使用量在缓慢增长,可能存在泄漏。
- full avg60 从 0 跳变到 5%:突发性内存压力,可能是大页分配或 cgroup 限制。
常见误区:不要只关注 some 而忽略 full。很多团队只设置 some avg10 > 30% 的告警,结果 full 已经飙到 10% 以上才收到通知,此时业务已受损。建议将 full 指标的告警阈值设置为 some 的 1/3 到 1/5。
3.4 阈值设定参考速查表
| 资源 | 指标 | avg10 阈值 | avg60 阈值 | avg300 阈值 | 告警级别 |
|---|---|---|---|---|---|
| CPU | some | > 20% | > 15% | > 10% | Warning |
| full | > 5% | > 3% | > 2% | Critical | |
| 内存 | some | > 10% | > 8% | > 5% | Warning |
| full | > 2% | > 1% | > 0.5% | Critical | |
| IO | some | > 30% | > 20% | > 15% | Warning |
| full | > 10% | > 5% | > 3% | Critical |
最佳实践:以上阈值适用于通用场景。对于延迟敏感型业务(如交易系统、实时音视频),建议将阈值整体下调 30%~50%;对于批处理或离线计算,可适当上调 20%~30%。最终阈值需结合业务压测和故障复盘持续调优。