Linux PSI判断内存压力来源
Linux PSI 判断内存压力来源,关键不是看“内存用了多少”,而是看任务因为内存资源等待了多久,再把这段等待与回收、swap、cgroup 限制和 OOM 证据对齐。先读 /proc/pressure/memory:some 表示至少有一部分任务被内存拖住,full 表示所有非空闲任务同时陷入该类等待;当 full 持续升高时,通常已经接近系统抖动,而不是普通缓存增长。
官方地址:https://docs.kernel.org/accounting/psi.html
- 先看
some/full的时间趋势,再看单点内存占用。 - 用回收、swap 和 cgroup 指标确认压力来自哪里。
- PSI 是压力信号,不单独等于 OOM;必须与日志和业务延迟闭环。
一个可靠的判断链是:PSI 证明任务在等内存,vmstat 与 meminfo 解释内核正在做什么,cgroup 指标说明谁触顶,OOM 日志和延迟则说明结果有多严重。
先把 PSI 的内存信号读成两种压力
先用下面的命令查看主机级内存 PSI。命令只读取 procfs,不需要把输出误认为某次真实压测结果。
# 查看主机级内存压力;some 和 full 分别代表两种等待范围
cat /proc/pressure/memory
# 只提取近 10 秒、60 秒和 300 秒的平均压力,便于做趋势对比
awk '{print $1, $2, $3, $4}' /proc/pressure/memory
典型格式包含 avg10、avg60、avg300 和累计的 total。avg10 突然升高而长期值接近零,多半是短时回收或突发分配;三个窗口一起抬升,说明压力已经持续。total 适合配合采集器计算增量,但不能单独说明当前是否正在恶化。
some 升高只说明部分任务在等待,CPU 仍可能有其他工作可做;full 升高则说明所有非空闲任务同时卡在内存压力上,持续时间过长就应优先排查抖动。两者都不是“已发生 OOM”的同义词。

用回收与 swap 证据解释压力来源
确认 PSI 有压力后,不要马上扩大内存。把同一时刻的回收和 swap 指标放在一起看:
# 观察回收、运行队列和 swap 活动;采样间隔按现场容量调整 vmstat 1 5 # 查看可回收内存、匿名页、文件页和提交量等背景信息 grep -E 'MemAvailable|SwapFree|SwapTotal|AnonPages|SReclaimable|Commit' /proc/meminfo
| 观察组合 | 更可能的解释 | 下一步 |
|---|---|---|
PSI some 上升,si/so 近零,回收不高 | 短时分配竞争或文件页回收 | 按时间窗口对照业务请求和缓存变化 |
some 与直接回收、si/so 同时升高 | 匿名页紧张,swap 或内存回收拖慢任务 | 检查 swap 延迟、匿名内存和分配峰值 |
| full 持续升高,运行队列和服务延迟一起恶化 | 系统出现明显内存抖动 | 优先保护关键服务,再定位大户或容量边界 |
这里的“来源”是证据链,不是单个指标的标签。例如 MemAvailable 下降但 PSI 不升,可能只是缓存布局变化;反过来,内存占用不满但某个 cgroup 的 PSI 很高,通常应查它自己的限制。

按 cgroup 区分整机压力与服务触顶
容器或 systemd 服务出现延迟时,主机级 PSI 可能把局部问题稀释掉。cgroup v2 通常可以查看对应目录下的 memory.pressure、memory.current、memory.max 和 memory.events。如果服务的 memory.pressure 明显升高,而主机级信号平稳,说明资源边界更可能在该组内部。
# 把 CGROUP_DIR 替换为已确认的 cgroup v2 目录,不要盲目遍历生产树 CGROUP_DIR=/sys/fs/cgroup/example.service # 对照当前用量、硬上限、局部压力和内存事件 cat "$CGROUP_DIR/memory.current" "$CGROUP_DIR/memory.max" cat "$CGROUP_DIR/memory.pressure" "$CGROUP_DIR/memory.events"
memory.max 受限时,服务可能在整机仍有余量的情况下先感到压力;memory.events 中的 high、max 或 oom 计数可以帮助确认是否越过了该边界。读取路径和字段会受 cgroup 版本、挂载方式及发行版配置影响,排查时先确认实际层级。
把 PSI 变成可行动的判断清单
值班时可以按四个问题收敛判断:第一,full 是否持续而不是瞬时尖峰;第二,回收和 swap 是否在同一窗口增加;第三,压力集中在主机还是某个 cgroup;第四,是否有 OOM、分配失败或业务延迟作为结果证据。四项都对上时,优先做限流、迁移或扩容;只有占用高而 PSI 平稳时,才适合把重点放在容量规划和缓存策略。
如果需要事件触发,内核 PSI 文档支持把阈值写入 /proc/pressure/memory,再用 poll、select 或 epoll 等待。阈值格式是 some|full stall_us window_us,窗口范围为 500ms 到 10s;生产环境应让采集器管理文件描述符生命周期,避免重复注册。
常见问题
PSI memory 高就等于内存不够吗?
不一定。它表示任务因内存资源发生等待,可能来自回收、cgroup 上限或突发分配;要结合回收、swap 和事件计数判断。
为什么内存还有空闲,cgroup 仍然有压力?
因为 cgroup 有自己的 memory.max 或其他边界,局部资源触顶时不能直接使用主机其他组的余量。
some 和 full 应该看哪个?
先看两者的时间趋势。some 用来发现部分任务受阻,full 用来识别全体非空闲任务同时等待的严重抖动,不能只盯一个数字。
总结
Linux PSI 最适合回答“任务是否真的被内存拖住”,而不是回答“谁占了多少内存”。先用 some/full 和多个时间窗口确认压力,再用回收、swap、cgroup 和 OOM 证据定位来源,最后把压力和业务延迟关联起来,才能把一个模糊的内存告警变成可执行的处理方案。
Linux open_tree怎样复制挂载树
- 上一篇
- Linux open_tree怎样复制挂载树
- 下一篇
- Fetch流式读取ReadableStream响应
-
- 文章 · linux | 33分钟前 |
- Linux perf record定位CPU热点
- 418浏览 收藏
-
- 文章 · linux | 36分钟前 | linux运维 · Linux 命名空间 挂载树 Mount API open_tree move_mount
- Linux open_tree怎样复制挂载树
- 376浏览 收藏
-
- 文章 · linux | 43分钟前 | linux运维 · Linux 防火墙规则 nftables nft list ruleset 地址族 规则集导出
- nftables list ruleset怎样按地址族导出配置
- 308浏览 收藏
-
- 文章 · linux | 49分钟前 | linux运维 · 服务管理 · Linux systemd socket激活 systemd.socket systemd.service
- Linux systemd socket激活服务
- 249浏览 收藏
-
- 文章 · linux | 49分钟前 | Linux · Linux systemd Cron Timer OnCalendar
- Linux systemd定时器替代cron任务
- 380浏览 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 516次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 500次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 485次学习
-
- PubMedQA
- 深入了解PubMedQA生物医学问答数据集,涵盖其核心功能、使用方法及在临床决策、药物研发等场景的应用,助力提升NLP模型性能。
- 1039次使用
-
- H2O EvalGPT
- H2O EvalGPT是H2O.ai推出的开源LLM评估平台,提供详细的大模型性能排行榜、行业特定基准测试及A/B测试功能,助您快速选择最适合项目的高性能大语言模型。
- 1038次使用
-
- LMArena
- LMArena是加州大学伯克利分校推出的AI模型匿名评测平台。通过盲测投票机制,用户可对比不同大模型回答并生成实时排行榜,助力开发者优化模型及用户选择最佳AI工具。
- 1181次使用
-
- HELM
- 深入了解斯坦福推出的HELM(Holistic Evaluation of Language Models)大模型评测体系。本文解析其核心功能、安装配置步骤及应用场景,涵盖准确性、公平性、鲁棒性等多维度指标,助力开发者全面优化语言模型性能。
- 1143次使用
-
- MMBench
- MMBench是由上海人工智能实验室等机构联合推出的多模态基准测试平台,提供细粒度能力评估、大规模数据集及VLMEvalKit工具。本文详细介绍其核心功能、安装使用方法及应用场景,助力开发者全面评估多模态模型性能。
- 987次使用
-
- Go goroutine 泄漏怎么查:pprof、context 和通道关闭检查清单
- 2026-06-27 392浏览
-
- Go select default 为什么会让 CPU 飙高?从空转循环到可控等待
- 2026-07-02 459浏览
-
- Go 服务锁竞争变慢怎么查:mutex profile 的采样、定位和修复手册
- 2026-07-15 395浏览
-
- Go 1.23 以后还要手动 Stop Timer 吗:一次超时循环改造实战
- 2026-07-16 403浏览
-
- Go 1.25 runtime/trace.FlightRecorder 怎么接:把偶发延迟留在内存环形缓冲里
- 2026-07-26 425浏览

