1. PSI 基础概念:理解压力失速信息

1.1 什么是 PSI(Pressure Stall Information)

PSI(Pressure Stall Information,压力失速信息)是 Linux 内核 4.20 版本引入的一项资源压力监控机制。它通过量化任务因等待稀缺资源(CPU、内存、I/O)而停滞的时间比例,直接反映系统资源的 “过载程度”。与传统的 CPU 使用率、内存占用率等“资源利用率”指标不同,PSI 关注的是 “任务等待时间”——即资源争抢对工作负载造成的实际影响。

核心洞察: 80% 的 CPU 使用率可能意味着系统健康,也可能意味着任务已开始排队等待。PSI 能直接告诉你“任务是否在等”,这是传统指标无法提供的视角。

1.2 PSI 的三大指标:CPU、内存、I/O

PSI 为三种关键资源分别记录压力数据,每种资源又细分为 some(至少一个任务在等待)和 full(所有任务都在等待)两个维度:

资源类型 指标名称 含义 典型场景
CPU some / full 任务因 CPU 时间片不足而等待运行 高并发计算、线程数远超核数
内存 (MEM) some / full 任务因物理内存不足而等待回收或换入 内存泄漏、OOM 前兆、swap 抖动
I/O some / full 任务因磁盘/网络 I/O 未完成而阻塞 日志刷盘、数据库大量读写、存储瓶颈

每个指标在 /proc/pressure/ 目录下以文件形式暴露,包含过去 10 秒、60 秒、300 秒及总时间的平均压力值(百分比):

# 查看 CPU 压力
cat /proc/pressure/cpu
some avg10=2.50 avg60=1.80 avg300=1.20 total=1234567890
full avg10=0.10 avg60=0.05 avg300=0.02 total=987654321

# 查看内存压力
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

# 查看 I/O 压力
cat /proc/pressure/io
some avg10=5.30 avg60=3.20 avg300=2.10 total=2345678901
full avg10=1.20 avg60=0.80 avg300=0.50 total=123456789
注意: avg10 是最近 10 秒的滑动平均值,对突发压力最敏感;avg60 和 avg300 则反映中长期趋势。告警阈值设定通常以 avg10 为主要参考,辅以 avg60 做趋势确认。

1.3 PSI 与系统负载的关系

系统负载(Load Average)和 PSI 都反映资源争抢,但视角截然不同:

对比维度 系统负载 (Load Average) PSI (Pressure Stall Information)
统计对象 处于运行或不可中断状态的进程数 任务因资源等待而停滞的时间比例
单位 进程数量(无上限) 百分比(0% ~ 100%)
资源区分 无法区分 CPU、内存、I/O 精确区分 CPU、MEM、IO 三类资源
灵敏度 对短时突发不敏感(1/5/15 分钟平均) 支持 10 秒滑动窗口,捕捉瞬时压力
告警价值 适合宏观趋势判断 适合精准阈值告警和根因定位

下图展示了 PSI 在系统监控体系中的位置,以及它与传统指标的关系:

PSI 在系统监控体系中的定位 CPU 使用率 传统利用率指标 内存占用率 传统利用率指标 磁盘 I/O 吞吐 传统利用率指标 PSI 压力失速信息 量化任务因等待资源而停滞的时间比例(0% ~ 100%) CPU 压力 some / full 内存压力 some / full I/O 压力 some / full PSI 弥补了传统指标“不知道任务在等”的盲区,是精准告警的基础

1.4 为什么 PSI 比传统指标更适合告警

传统指标(CPU 使用率、内存占用率、磁盘 IOPS)只能告诉你“资源用了多少”,但无法回答最关键的问题:“任务是否因此受到了影响?”。PSI 直接测量任务因资源不足而停滞的时间比例,天然适合作为告警阈值的基础:

  • 消除误报: CPU 使用率 90% 但任务无等待(some=0),说明系统仍在高效运转,无需告警。
  • 捕捉隐性瓶颈: 内存占用率 60% 但 PSI 内存压力持续升高,可能意味着内存碎片或回收效率低下。
  • 资源级根因定位: 当应用响应变慢时,PSI 能直接告诉你瓶颈在 CPU、内存还是 I/O,无需逐一排查。
实战要点: 在设定告警阈值时,建议将 PSI 的 avg10 作为主要告警信号,avg60 作为趋势确认,避免因瞬时抖动产生误报。例如:当 CPU 的 some avg10 > 10% 且持续超过 30 秒时触发警告,> 30% 时触发严重告警。