1. PSI 漂移告警概述
1.1 PSI 指标定义
PSI(Pressure Stall Information)是 Linux 内核 4.20+ 引入的资源压力量化指标,用于衡量 CPU、内存、IO 三类资源因竞争导致任务停滞的时间占比。PSI 以 /proc/pressure/ 下的三个伪文件暴露原始数据:
| 资源类型 | 文件路径 | 核心字段 | 含义 |
|---|---|---|---|
| CPU | /proc/pressure/cpu |
some avg10/60/300 |
至少一个任务因 CPU 饥饿而等待的时间占比 |
| 内存 | /proc/pressure/memory |
some avg10/60/300 + full avg10/60/300 |
some:至少一个任务因内存不足等待;full:所有任务均因内存等待 |
| IO | /proc/pressure/io |
some avg10/60/300 + full avg10/60/300 |
some:至少一个任务因 IO 阻塞等待;full:所有任务均因 IO 阻塞 |
关键区别:
some 表示“至少一个任务受影响”,full 表示“所有可运行任务均受影响”。full 值越高,说明资源瓶颈越严重,对整体吞吐的打击越彻底。
1.2 漂移概念
“漂移”指 PSI 指标在时间维度上的基线偏移。正常运行时,PSI 各窗口(avg10 / avg60 / avg300)的数值在特定负载下保持相对稳定;当系统行为或配置发生变化,导致 PSI 值持续偏离历史基线,即发生漂移。漂移的典型表现:
- 均值爬升: avg10 从 0.5% 逐步升至 5%,且持续超过 1 小时。
- 窗口背离: avg10 远高于 avg300,说明近期突发压力,但长期基线未变。
- full/some 比率恶化: 内存 full 值从 0.1% 升至 2%,表明内存瓶颈从偶发变为常态。
漂移 ≠ 毛刺: 毛刺是瞬时尖峰(秒级),漂移是分钟级到小时级的持续偏移。告警规则引擎必须区分二者,否则会触发大量无效告警。
1.3 告警在 SRE 中的重要性
PSI 漂移告警是 SRE 容量规划、故障定位、变更风控的第一道防线。其核心价值体现在三个层面:
- 提前发现资源瓶颈: 在 CPU 使用率或内存占用达到 100% 之前,PSI 漂移已暴露任务等待加剧,为扩容争取 5~30 分钟窗口。
- 区分真实负载与噪声: 结合
some与full的漂移方向,可判断是局部争用还是全局瓶颈,避免误判。 - 量化变更影响: 上线新版本或调整内核参数后,PSI 基线漂移是衡量变更是否引入资源压力的客观指标。
常见陷阱: 直接使用固定阈值(如 PSI > 10%)告警,在低负载时段会漏报,在高负载时段会误报。必须引入动态基线 + 漂移检测机制,才能适配不同业务周期的资源画像。
1.4 PSI 漂移检测逻辑框架
下图展示 PSI 漂移告警规则引擎的核心检测流程,从原始指标采集到最终告警收敛:
1.5 漂移告警 vs 固定阈值告警
| 对比维度 | 固定阈值告警 | 漂移告警 |
|---|---|---|
| 阈值设定 | 人工指定静态值(如 PSI > 10%) | 基于历史数据自动计算动态基线 |
| 适应能力 | 无法适配业务潮汐、版本变更 | 自动跟随系统负载变化调整基线 |
| 误报率 | 高(低负载时漏报,高负载时误报) | 低(仅对偏离基线的持续偏移告警) |
| 漏报率 | 高(缓慢爬升不易触发固定阈值) | 低(持续偏移超过漂移阈值即触发) |
| 运维成本 | 需频繁人工调整阈值 | 基线自动更新,减少人工干预 |
实践建议: 在引入漂移告警的初期,建议同时保留固定阈值作为“兜底”告警,待漂移模型稳定运行 2~4 周后,再逐步将固定阈值告警降级为次要通知或关闭。