3、PSI数据获取:通过 /proc/pressure 目录读取PSI指标

在设定告警阈值之前,必须掌握PSI原始数据的获取方法。Linux内核从4.20版本开始,通过 /proc/pressure 伪文件系统暴露PSI指标,无需额外安装工具即可直接读取。

3.1 /proc/pressure 目录结构

该目录下包含三个文件,分别对应CPU、内存和IO三种资源的压力统计:

文件路径 资源类型 监控维度 内核版本要求
/proc/pressure/cpu CPU some(部分任务受阻) ≥ 4.20
/proc/pressure/memory 内存 some + full(全部任务受阻) ≥ 4.20
/proc/pressure/io IO some + full ≥ 4.20
注意: CPU资源只有 some 维度,因为CPU不存在"全部任务阻塞"的场景——至少空闲任务(idle)可以运行。而内存和IO的 full 维度表示所有非空闲任务均处于等待状态,是衡量系统"完全卡死"的关键指标。

3.2 使用cat命令读取原始数据

直接使用 cat 命令即可查看当前PSI快照:

# 查看CPU压力
cat /proc/pressure/cpu

# 查看内存压力
cat /proc/pressure/memory

# 查看IO压力
cat /proc/pressure/io

典型输出示例:

# /proc/pressure/cpu
some avg10=0.00 avg60=0.00 avg300=0.00 total=0

# /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

# /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

3.3 文件格式详解

每个文件由一行或多行组成,每行包含以下字段:

字段 含义 数据类型 说明
some / full 压力类型 字符串 some=至少一个任务受阻;full=所有非空闲任务受阻
avg10 最近10秒平均压力 浮点数(0.00~1.00) 百分比值,如0.50表示50%的时间存在压力
avg60 最近60秒平均压力 浮点数(0.00~1.00) 反映中期趋势,适合作为告警基准
avg300 最近300秒平均压力 浮点数(0.00~1.00) 反映长期基线,用于容量规划
total 累计压力时间(微秒) 无符号64位整数 系统启动至今的总延迟累积,用于计算增量
关键解读: avg10/avg60/avg300 的值范围是 0.00 ~ 1.00,对应 0% ~ 100%。例如 avg10=0.85 表示在过去10秒内,有85%的时间至少有一个任务因资源不足而等待。这个百分比直接决定了告警阈值的大小——通常生产环境建议在 0.30~0.70 区间设置告警。

3.4 PSI数据获取流程

PSI数据获取与解析流程 Linux内核 /proc/pressure cpu memory io cat 命令 原始文本输出 解析字段 some/full · avg10 · avg60 · avg300 · total 告警阈值设定

3.5 数据解读实战示例

以下是一个真实生产环境的IO压力输出:

# cat /proc/pressure/io
some avg10=0.72 avg60=0.45 avg300=0.21 total=2847123456
full avg10=0.35 avg60=0.18 avg300=0.08 total=987654321

解读要点:

  • some avg10=0.72:过去10秒内,72%的时间有任务在等待IO,属于严重告警级别。
  • full avg10=0.35:35%的时间所有非空闲任务都在等待IO,系统已出现明显卡顿。
  • avg60=0.45 / avg300=0.21:中期和长期趋势显示压力正在快速上升,需要立即介入。
  • total:累计延迟时间,可用于计算每秒增量,判断压力是否持续恶化。
常见误区: 不要只看 avg10 就下结论。短时突发可能导致avg10偏高,但avg60和avg300如果很低,说明只是瞬时抖动。建议将三个时间窗口结合判断:avg10 > 阈值 且 avg60 > 阈值×0.7 时再触发告警,可有效减少误报。

3.6 文件格式与监控工具对照

监控工具 数据来源 是否依赖/proc/pressure 典型采集间隔
Prometheus + node_exporter /proc/pressure 是(≥0.18.0版本) 15s
Telegraf /proc/pressure 是(≥1.14.0版本) 10s
Datadog Agent /proc/pressure 是(≥7.27.0版本) 15s
自定义Shell脚本 直接cat读取 是 自定义
最佳实践: 在采集PSI数据时,建议同时记录 total 字段的增量变化。通过计算 Δtotal / Δtime 可以得到每秒压力持续时间(微秒/秒),这个指标比avg值更敏感,适合作为早期预警信号。