PSI 量化资源等待
PSI(Pressure Stall Information)把「任务因为等资源而被迫停下」的时间比例直接量化出来,分成 CPU、IO、内存三类。相比平均负载,它更贴近真实体验:负载高但任务都没等待,说明只是并行度高;负载不高但 IO 等待占比很高,说明磁盘是真瓶颈。数据来自内核在 /proc/pressure 下暴露的接口。
基本信息
| 适用平台 | Linux 内核 4.20 以上并要求开启 PSI 配置项 |
|---|---|
| 数据入口 | /proc/pressure/cpu、/proc/pressure/io、/proc/pressure/memory |
| 字段构成 | some 与 full 两组,各自带 avg10、avg60、avg300 与累计 total |
| 采集情况 | 主流监控组件已普遍内建采集 |
典型使用场景
- 判断「机器变慢」是 CPU、内存还是磁盘在拖后腿
- 压测时观察资源争抢随并发上升的变化曲线
- 排查负载不高但响应明显变慢的诡异现象
- 给容量评估提供量化依据,而不是只看使用率
- 定位内存回收压力是否已经影响到业务进程
直接读取
直接读取
cat /proc/pressure/cpu # some avg10=0.02 avg60=0.01 avg300=0.00 total=123456
cat /proc/pressure/io
cat /proc/pressure/memory
watch -n1 'cat /proc/pressure/io' # 持续观察秒级波动
for i in 1 2 3; do cat /proc/pressure/io | head -1; sleep 5; done # 间隔采样
grep -o 'some avg60=[0-9.]*' /proc/pressure/io # 脚本取字段字段逐项读法
| 字段 | 含义 | 判断要点 |
|---|---|---|
| some | 至少有一个任务因该资源停等的时间占比 | 反映争抢开始出现的程度 |
| full | 所有可运行任务都在等待的时间占比 | 出现持续非零说明影响已经很明显 |
| avg10 | 最近 10 秒的平均值 | 适合看瞬时尖峰,容易受单次抖动影响 |
| avg60 / avg300 | 最近 1 分钟与 5 分钟的平均值 | 判断趋势与业务时段的关联性 |
| total | 累计停等微秒数 | 适合对比不同时间点的增量 |
PSI 反映的是「等待」而不指向具体设备:看到 IO 压力高,还要结合磁盘的利用率与平均等待时间才能定位到究竟哪块盘、哪个进程。
排查顺序
- 连续采样几次,先判断压力是持续存在还是瞬时抖动
- 依次读 CPU、IO、内存三类,找出压力最高的那一类作为主线索
- IO 压力高时结合磁盘利用率与平均等待时间,定位到具体设备
- 内存压力高时检查回收是否频繁、有没有进程被强制终止的记录
- 锁定可疑进程后再分析它的读写模式是否能通过参数或架构优化
压力比例本身没有绝对好坏之分,与响应时间、错误率这类业务指标对照看才有说服力;单看数值高低很难判断严重程度。