2. PSI指标解读:三种资源类型与两种时间维度
PSI(Pressure Stall Information)是Linux内核4.20引入的指标,用于量化系统资源(CPU、内存、IO)因竞争导致的任务等待时间占比。理解PSI,需要先拆解其资源类型和时间维度两个核心维度。
2.1 三种资源类型:CPU、内存、IO
PSI分别监控三类资源,每类资源独立统计,互不干扰:
| 资源类型 | 监控对象 | 典型竞争场景 | 影响 |
|---|---|---|---|
| CPU | 可运行队列中的任务等待CPU时间片 | 高并发计算、线程数远超CPU核数 | 任务调度延迟,吞吐下降 |
| 内存 (memory) | 任务因等待物理内存/swap而阻塞 | 内存泄漏、OOM、频繁swap换入换出 | 进程卡顿,严重时触发OOM Killer |
| IO | 任务因等待块设备IO完成而休眠 | 磁盘带宽打满、大量随机读写、存储故障 | 应用响应变慢,数据库查询超时 |
实践要点:CPU和内存的竞争通常与计算密集型或内存密集型应用相关;IO竞争则常见于数据库、日志系统、大数据处理等场景。告警阈值应针对不同资源分别设定。
2.2 两种时间维度:some 与 full
每种资源类型下,PSI都提供两个时间维度指标,用于描述受影响的任务范围:
- some:至少有一个任务因该资源而等待的时间占比。表示资源存在竞争,但系统可能仍在处理其他任务。
- full:所有非空闲任务都因该资源而等待的时间占比。表示资源严重饱和,系统整体停滞。
some 和 full 的关系可以类比“局部拥堵”与“全路瘫痪”:
some = 至少一辆车在等红灯(部分任务等待)
full = 所有车道全部堵死(所有任务等待)
2.3 PSI指标数值的含义
PSI指标以百分比形式呈现,表示在特定时间窗口内,任务处于等待状态的时间占比。内核默认提供三个时间窗口:10秒、60秒、300秒。
例如,some avg10=5.00 表示在过去10秒内,平均有5%的时间至少有一个任务在等待资源。
| 指标示例 | 含义 | 严重程度 |
|---|---|---|
some avg10=0.50 |
过去10秒,0.5%的时间有任务等待 | 轻微,可忽略 |
some avg10=10.00 |
过去10秒,10%的时间有任务等待 | 中等,需关注 |
full avg10=5.00 |
过去10秒,5%的时间所有任务都在等待 | 严重,可能影响SLA |
full avg60=30.00 |
过去60秒,30%的时间系统完全停滞 | 紧急,需立即处理 |
注意:some 和 full 的数值是独立的。例如,CPU some=20% 而 full=5%,说明CPU竞争主要影响部分任务,但尚未导致全局停滞。full 值越高,系统整体可用性越差。
2.4 PSI指标结构总览
下图展示了PSI指标的整体结构,帮助理解资源类型与时间维度的组合关系:
2.5 如何读取 /proc/pressure/ 文件
系统通过 /proc/pressure/ 目录下的三个文件暴露PSI指标:
# 查看CPU压力
cat /proc/pressure/cpu
some avg10=0.00 avg60=0.00 avg300=0.00 total=0
full avg10=0.00 avg60=0.00 avg300=0.00 total=0
# 查看内存压力
cat /proc/pressure/memory
some avg10=0.00 avg60=0.00 avg300=0.00 total=0
full avg10=0.00 avg60=0.00 avg300=0.00 total=0
# 查看IO压力
cat /proc/pressure/io
some avg10=0.00 avg60=0.00 avg300=0.00 total=0
full avg10=0.00 avg60=0.00 avg300=0.00 total=0
各字段含义:
- avg10 / avg60 / avg300:过去10秒、60秒、300秒的平均等待时间占比(百分比)。
- total:系统启动至今的累计等待微秒数(用于计算长期趋势)。
关键理解:PSI的数值是比例而非绝对值。例如 some avg10=10.00 表示10%的时间存在资源竞争,而非任务等待了10秒。这个比例直接反映了资源瓶颈对任务进度的拖累程度。
2.6 资源类型与时间维度的组合矩阵
将三种资源与两种时间维度组合,可以得到6个核心监控指标,每个指标反映不同的系统状态:
| 组合 | 含义 | 典型告警阈值参考 |
|---|---|---|
| CPU some | 部分任务在等待CPU | avg10 > 10% 关注,> 30% 告警 |
| CPU full | 所有任务都在等待CPU(极少发生) | avg10 > 5% 告警 |
| 内存 some | 部分任务因内存不足阻塞 | avg10 > 5% 关注,> 15% 告警 |
| 内存 full | 系统整体因内存不足停滞 | avg10 > 2% 告警 |
| IO some | 部分任务在等待IO | avg10 > 10% 关注,> 30% 告警 |
| IO full | 所有任务都在等待IO | avg10 > 5% 告警 |
注意:上述阈值仅为经验参考值,实际生产环境需根据业务容忍度、资源规格、应用类型进行调整。后续章节将详细讲解阈值设定方法论。
通过以上解读,你应该能够准确理解PSI指标中资源类型、时间维度和数值含义三个核心要素。这是后续设定告警阈值的基础。