PSI告警阈值设定从入门到实践 - 第1节
1.1 什么是 PSI(Pressure Stall Information)
PSI(Pressure Stall Information)是 Linux 内核 4.20 版本引入的一项资源压力度量机制,用于量化 CPU、内存和 IO 资源因竞争而导致的任务停滞时间比例。它从“任务等待资源”的角度出发,直接反映系统是否处于过载状态。
核心定义:PSI 指标衡量的是任务因等待某种资源(CPU、内存、IO)而处于不可运行状态的时间占总时间的百分比。数值越高,表示资源竞争越激烈,任务被“压住”的时间越长。
PSI 通过 /proc/pressure/ 接口暴露三个文件:
# 查看 CPU 压力
cat /proc/pressure/cpu
# 查看内存压力
cat /proc/pressure/memory
# 查看 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
| 字段 | 含义 |
|---|---|
| some | 至少有一个任务因资源不足而停滞的时间比例 |
| full | 所有任务都因资源不足而停滞的时间比例(系统完全卡住) |
| avg10 | 过去 10 秒的滑动平均压力百分比 |
| avg60 | 过去 60 秒的滑动平均压力百分比 |
| avg300 | 过去 300 秒的滑动平均压力百分比 |
| total | 自系统启动以来的累计压力微秒数 |
1.2 PSI 产生的背景与意义
传统指标的局限性
在 PSI 出现之前,运维人员主要依赖 CPU 使用率、内存使用量、IOPS 等传统指标判断系统负载。但这些指标存在明显盲区:
- CPU 使用率 100% 并不一定意味着任务被阻塞——可能只是计算密集型任务在高效运行。
- 内存使用率 90% 也不直接说明有内存回收压力——可能只是缓存占用了大量空间。
- IOPS 很高 可能是正常业务流量,而非存储瓶颈。
关键问题:传统指标衡量的是“资源用了多少”,而非“任务等了多少”。PSI 直接测量后者,填补了“资源竞争导致任务停滞”这一关键观测空白。
PSI 的诞生背景
Google 工程师在数据中心运维中发现,许多“看起来正常”的机器实际上存在严重的资源竞争问题,导致应用延迟飙升。传统指标无法准确捕捉这类“隐形压力”。2018 年,Facebook 工程师 Johannes Weiner 主导将 PSI 合入 Linux 内核主线,旨在提供:
| 需求 | 传统指标能否满足 | PSI 如何解决 |
|---|---|---|
| 量化任务等待时间 | ❌ 无法直接测量 | ✅ 直接统计不可运行时间占比 |
| 区分部分阻塞与完全阻塞 | ❌ 无法区分 | ✅ 提供 some / full 两个维度 |
| 短期与长期趋势 | ❌ 缺乏滑动平均 | ✅ 10s / 60s / 300s 三档滑动窗口 |
| 低开销持续监控 | ⚠️ 采样间隔难平衡 | ✅ 内核原生统计,几乎零开销 |
PSI 的运维意义
- 提前发现资源瓶颈:在 CPU 使用率飙升至 100% 之前,PSI 可能已经显示 5%~10% 的压力值,提供预警窗口。
- 精准定位瓶颈资源:通过对比 cpu / memory / io 三个维度的 PSI 数值,快速判断系统瓶颈所在。
- 量化服务质量:PSI 的 full 指标直接反映“系统完全卡住”的时间比例,是衡量用户体验的重要依据。
- 指导容量规划:长期 PSI 趋势数据可用于判断是否需要扩容或优化。
1.3 PSI 与 CPU / 内存 / IO 压力的关系
PSI 并非替代传统指标,而是从任务等待的视角补充传统资源指标。下面分别说明三种资源压力在 PSI 中的表现。
CPU 压力
当多个任务争抢 CPU 时间片时,部分任务会进入 TASK_RUNNING 但无法获得调度(即 runqueue 等待)。PSI 的 cpu.some 反映至少一个任务在等待 CPU 的时间比例。
- 典型场景:Web 服务器并发过高、计算密集型批处理任务。
- 关联传统指标:CPU 使用率、load average、上下文切换次数。
- PSI 阈值参考:cpu.some avg10 > 10% 通常表示 CPU 资源紧张。
内存压力
内存压力主要来自回收机制(kswapd 或直接回收)。当系统内存不足时,内核需要回收页面,导致任务等待内存分配。PSI 的 memory.some 和 memory.full 反映这种等待。
- 典型场景:内存泄漏、cgroup 内存限制过紧、大页分配失败。
- 关联传统指标:内存使用率、swap 使用量、OOM 事件。
- PSI 阈值参考:memory.some avg10 > 5% 或 memory.full avg10 > 1% 需关注。
IO 压力
IO 压力发生在任务等待块设备(磁盘、网络存储)完成读写操作时。这是最常见的性能瓶颈之一。PSI 的 io.some 和 io.full 直接量化 IO 等待对任务的影响。
- 典型场景:数据库大量随机读写、日志写入过密、存储设备性能不足。
- 关联传统指标:IOPS、IO 延迟、await、svctm、iowait。
- PSI 阈值参考:io.some avg10 > 10% 或 io.full avg10 > 5% 通常表示 IO 瓶颈。
实践建议:在搭建监控系统时,建议同时采集传统资源指标和 PSI 指标。传统指标用于判断“资源用了多少”,PSI 用于判断“任务等了多少”。两者结合才能全面评估系统健康度,避免误判。