Linux PSI 怎么定位 CPU、内存和 IO 压力:/proc/pressure 与阈值告警实战
线上接口偶发变慢时,top 观测到的 CPU 使用率只有 35%,磁盘也没有明显打满,但请求延迟已经从 80ms 涨到 900ms。这个时候只看 load average 或单个进程的 CPU 百分比,很容易把“正在等待资源”的时间漏掉。Linux PSI(Pressure Stall Information)正是用来统计:有多少任务在等 CPU、内存或 IO,以及这种等待已经持续了多久。
/proc/pressure/cpu、memory、io分别记录三类资源造成的任务停顿。some表示至少有一个非空闲任务在等待,full表示所有非空闲任务同时停顿,二者不能混为一谈。avg10适合看突发尖峰,avg60和avg300更适合判断是否形成持续性压力。- 先用 PSI 判断压力类型,再结合
vmstat、iostat和业务延迟决定限流、迁移或降级;不要只凭一个百分比重启服务。
为什么 CPU 不高,接口仍然会被拖慢
CPU 使用率回答的是“处理器正在忙多少”,而 PSI 关注“任务因为资源不足而停了多久”。例如线程在等待内存回收、磁盘请求完成或可运行任务获得 CPU 时间片时,业务延迟会继续增加,但瞬时 CPU 曲线未必同步升高。
PSI 把这种影响按最近 10 秒、60 秒和 300 秒的窗口计算成百分比,并把累计停顿时间放在 total 中。它不是某个进程的耗时,也不是磁盘利用率;它更像一张“业务生产时间被资源等待吃掉了多少”的统计账单。
先读懂 /proc/pressure 的四组字段
先在一台启用 PSI 的 Linux 主机上执行:
for f in /proc/pressure/cpu /proc/pressure/memory /proc/pressure/io; do
echo "--- $f"
cat "$f"
done
CPU 通常只有 some 行,内存和 IO 还会提供 full 行。字段的含义可以先按下面的方式记:
| 字段 | 表示什么 | 排查用途 |
|---|---|---|
| some | 至少一个任务在该资源上停顿的时间占比 | 发现局部争用和延迟抖动 |
| full | 所有非空闲任务同时停顿的时间占比 | 识别内存或 IO 把整机拖入近似停摆 |
| avg10 | 最近 10 秒的平均压力 | 确认刚发生的突发事件 |
| avg60/avg300 | 最近 60/300 秒的平均压力 | 判断压力是否持续并影响容量 |
| total | 累计停顿微秒数 | 配合采样间隔计算增长速度 |
full 不是“压力更大”的简单别名。它表示所有非空闲任务同时被卡住;如果 memory 的 full avg10 持续抬头,通常比单独看到 some 更值得优先处理。

把 PSI 读数接到一次真实排查里
建议按“资源类型—持续时间—业务症状”的顺序判断。一次采样只说明一个瞬间,至少连续读取几次,观察 avg10 是否和接口延迟同时上升。
watch -n 1 'date; cat /proc/pressure/cpu; cat /proc/pressure/memory; cat /proc/pressure/io'
CPU PSI 上升:先区分调度争用与单进程忙
cpu some 上升说明有任务没有及时拿到 CPU,但不代表某个进程已经失控。继续看 vmstat 1 的运行队列、上下文切换和 steal 时间;虚拟机里的 steal 偏高时,根因可能在宿主机资源争用。只有把 PSI、运行队列和业务延迟对齐,才适合决定是否迁移实例或降低批任务优先级。
memory PSI 上升:不要直接等同于 OOM
内存压力可能来自回收、匿名页换入换出或工作集超过当前余量。先看 memory.current、memory.events(如果使用 cgroup v2)和 vmstat 1 的 swap 活动,再检查应用是否在同一时间出现 GC 或缓存抖动。PSI 告诉你“等待变多了”,它本身不能证明已经发生 OOM kill。
io PSI 上升:把等待与设备队列对上
io full 持续上升时,所有非空闲任务都可能在等 IO。用 iostat -xz 1 对照设备的 await、队列长度和利用率;如果只有一个批处理任务制造大量同步写入,可以先调整它的并发和优先级,而不是给整台机器增加无关的 CPU。
用 PSI 触发器把“变慢”变成可处理事件
内核 PSI 文档定义的触发器格式是 。例如下面的设置表示:内存在任意 1 秒窗口内累计有 150ms 的 some 停顿时,等待文件描述符收到事件。
psi-monitor --file /proc/pressure/memory \
--trigger "some 150000 1000000" \
--event POLLPRI --action shed-batch
生产环境不要把上面的示例直接当成万能阈值。阈值应该来自业务基线:先记录正常高峰的 avg10、接口 P95 和批任务完成时间,再把“持续异常 + 可执行动作”绑定起来。比如内存 PSI 触发后暂停低优先级压缩任务,恢复后再放开;如果没有对应的降级动作,告警只会变成噪声。

cgroup v2 场景下,为什么要看 memory.pressure
整机的 /proc/pressure/memory 可能看起来平稳,但某个容器或服务已经被自己的内存边界拖慢。启用 cgroup v2 后,每个 cgroup 文件夹可以提供同样格式的 cpu.pressure、memory.pressure 和 io.pressure。这时要同时记录服务所属 cgroup 的路径、内存上限和 PSI,避免把单个租户的问题误判成整机故障。
systemctl show --property=ControlGroup batch-worker.service
cat /sys/fs/cgroup//memory.pressure
cat /sys/fs/cgroup//memory.events
如果 cgroup 的 memory.pressure 持续升高而整机指标正常,优先检查该服务的内存上限、缓存策略和并发配置;如果两者都升高,再扩大到主机容量和同机任务的资源分配。
常见问题:PSI 指标怎么避免误读
PSI 的 avg10 是 CPU 使用率吗?
不是。它是最近 10 秒内任务因指定资源停顿的时间比例,和 CPU busy、磁盘利用率是不同维度。
看到 memory full 就一定会 OOM 吗?
不一定。memory full 说明所有非空闲任务同时受到内存压力影响,是否 OOM 还要结合 memory.events、内核日志和实际回收情况判断。
为什么只看 avg300 会错过故障?
300 秒窗口会把短时尖峰摊平。突发延迟排查应先看 avg10,再用 avg60 和 avg300 判断事件是否持续。
所有 Linux 都有 /proc/pressure 吗?
取决于内核是否启用了 PSI 配置以及运行环境是否暴露该接口。文件不存在时先确认内核配置和发行版限制,不要用空值代替零压力。
把 PSI 纳入日常排查清单
- 先采集 CPU、memory、io 三个文件的
some,再按需看内存和 IO 的full。 - 把
avg10与接口 P95、队列长度、批任务耗时放在同一时间轴上。 - 使用
vmstat、iostat、memory.events做交叉验证,不根据 PSI 单项指标下结论。 - 只有在触发器对应明确的限流、迁移、暂停或恢复动作时,才把它接入自动化处理。
PSI 的价值不在于再增加一条监控曲线,而是把“机器看起来没满,但业务已经在等”变成可以量化和定位的证据。先找到是哪一种等待在吞噬生产时间,再针对性调整调度、内存、IO 或业务负载,排查路径会比盯着 load average 更短。
Python 3.14 Zstandard 流式日志怎么落地:compression.zstd 的帧边界与兼容门禁
- 上一篇
- Python 3.14 Zstandard 流式日志怎么落地:compression.zstd 的帧边界与兼容门禁
- 下一篇
- Linux cgroup v2 memory.events 怎么看:区分回收、限额与 OOM 的证据链
-
- 文章 · linux | 52分钟前 | oom · 内存 · Linux · 运维排查 · cgroup · Linux OOM cgroup v2 memory.events memory.current memory.max memory.high
- Linux cgroup v2 memory.events 怎么看:区分回收、限额与 OOM 的证据链
- 456浏览 收藏
-
- 文章 · linux | 2小时前 | Linux · 运维排查 · 进程管理 · 服务限时 · Linux 服务治理 journalctl RuntimeMaxSec
- Linux RuntimeMaxSec 到点后为什么没退出:服务属性与日志验证
- 389浏览 收藏
-
- 文章 · linux | 2小时前 | Linux · 运维排查 · 进程管理 · 服务限时 · Linux 服务治理 journalctl RuntimeMaxSec
- Linux 服务超过 RuntimeMaxSec 怎么验收:运行时限、日志结果与重启边界
- 474浏览 收藏
-
- 文章 · linux | 3小时前 | Linux · 网络排障 · Netfilter · Linux conntrack nf_conntrack_max
- Linux conntrack 表满怎么排查:nf_conntrack_count 与 max 的安全处理
- 129浏览 收藏
-
- 文章 · linux | 4小时前 | Linux · 故障排查 · 服务隔离 · Linux 临时文件 PrivateTmp /tmp mount namespace
- Linux PrivateTmp 开启后 /tmp 文件去哪了:服务命名空间与排查边界
- 254浏览 收藏
-
- 文章 · linux | 7小时前 | Linux · 运维 · 服务配置 · 进程资源 · ulimit LimitNOFILE Linux 服务配置 进程限制
- Linux LimitNOFILE 改了仍是 1024:unit 覆盖与新 PID 校验
- 179浏览 收藏
-
- 文章 · linux | 7小时前 | Linux · 运维 · 服务配置 · 进程资源 · ulimit LimitNOFILE Linux 服务配置 进程限制
- Linux 服务 LimitNOFILE 配置不生效怎么办:覆盖配置与新 PID 验收
- 185浏览 收藏
-
- 文章 · linux | 9小时前 | 定时任务 · Linux · 运维 · crontab · 日志核验 · Linux 定时任务 crontab journalctl OnCalendar Persistent
- Linux 日历定时任务怎么补跑:OnCalendar、Persistent 与 journalctl 实战
- 120浏览 收藏
-
- 文章 · linux | 9小时前 | 定时任务 · Linux · 运维 · crontab · 服务定时器 · Linux crontab 服务定时器 OnCalendar Persistent
- Linux 服务定时器替代 crontab:日历触发、错过补跑与日志核验
- 237浏览 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 516次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 500次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 485次学习
-
- ljg-skills
- ljg-skills 是李继刚开源的 AI 技能与提示词集合,面向大模型使用者整理了一批可复用的 prompt、角色设定和任务技能模板,适合用于学习提示词设计、搭建个人 AI 工作流和沉淀团队常用智能体能力。
- 4894次使用
-
- MELO音乐
- MELO音乐是一站式AI视频与音乐制作助手,对标suno, udio的高品质体验。提供伴奏生成、原创写词、无损导出、哼唱识曲、混音变声等全套音频与短视频编辑工具。无论是流行Kpop、电音说唱、民谣古风、摇滚儿歌还是商用轻音乐,MELO为你免费谱曲,轻松做同款!
- 4474次使用
-
- UniScribe
- UniScribe 是一款 AI 音视频转文字与内容整理工具,支持上传音频、视频文件或粘贴 YouTube 链接,自动生成转写文本、摘要、思维导图和关键问题,并支持多格式导出,适合会议记录、课程学习、访谈整理和内容创作复盘。
- 4417次使用
-
- 剧云
- 剧云是专业中文剧本创作平台,安全稳定运行十余年,集成AI编剧、剧本医生审核、人物小传、剧情关系图、大纲编写、多人协作、Word导入导出、版权管控功能,数据安全防护,轻松高效创作剧本。
- 4654次使用
-
- 万象有声
- 万象有声,一个专为有声创作者打造的新一代智能有声内容创作平台。平台提供专业的智能拆章、智能画本编辑、AI配音、AI生成音效、后期制作、智能对轨、智能审听等有声创作全流程工具,可以帮助创作者高效、低成本创作出引人入胜的有声作品。立即体验,让有声书制作更简单!
- 4612次使用
-
- 详解golang执行Linuxshell命令完整场景下的使用方法
- 2023-01-07 426浏览
-
- go程序部署到linux上运行的实现方法
- 2023-01-02 387浏览
-
- Linux系统下Go语言开发环境搭建
- 2023-01-07 242浏览
-
- web项目中golang性能监控解析
- 2023-01-08 188浏览
-
- 使用golang获取linux上文件的访问/创建/修改时间
- 2022-12-31 238浏览

