当前位置:首页 > 文章列表 > 文章 > linux > Linux PSI判断内存压力来源

Linux PSI判断内存压力来源

来源:17golang原创 2026-11-15 17:01:16 0浏览 收藏

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”的同义词。

Linux PSI 内存压力中 some、full 与 avg10、avg60、avg300 的静态关系图
图1:结构说明图展示 Linux PSI 的内存压力信号、时间窗口与 some/full 含义,不是截图或运行证据。

用回收与 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 很高,通常应查它自己的限制。

Linux PSI 从内存压力到回收、swap、cgroup 与 OOM 证据的静态关系图
图2:关系说明图把 PSI、内存回收、swap、cgroup 边界和 OOM 日志放在同一排障模型中,不代表实际运行结果。

按 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 证据定位来源,最后把压力和业务延迟关联起来,才能把一个模糊的内存告警变成可执行的处理方案。

版本声明
本文转载于:17golang原创 如有侵犯,请联系study_golang@163.com删除
Linux open_tree怎样复制挂载树Linux open_tree怎样复制挂载树
上一篇
Linux open_tree怎样复制挂载树
Fetch流式读取ReadableStream响应
下一篇
Fetch流式读取ReadableStream响应
查看更多
最新文章
查看更多
课程推荐
  • 前端进阶之JavaScript设计模式
    前端进阶之JavaScript设计模式
    设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
    543次学习
  • GO语言核心编程课程
    GO语言核心编程课程
    本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
    516次学习
  • 简单聊聊mysql8与网络通信
    简单聊聊mysql8与网络通信
    如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
    500次学习
  • JavaScript正则表达式基础与实战
    JavaScript正则表达式基础与实战
    在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
    487次学习
  • 从零制作响应式网站—Grid布局
    从零制作响应式网站—Grid布局
    本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
    485次学习
查看更多
AI推荐
  • PubMedQA数据集详解:生物医学问答基准、功能与应用指南
    PubMedQA
    深入了解PubMedQA生物医学问答数据集,涵盖其核心功能、使用方法及在临床决策、药物研发等场景的应用,助力提升NLP模型性能。
    1039次使用
  • H2O EvalGPT:开源LLM大模型评估与排行榜工具
    H2O EvalGPT
    H2O EvalGPT是H2O.ai推出的开源LLM评估平台,提供详细的大模型性能排行榜、行业特定基准测试及A/B测试功能,助您快速选择最适合项目的高性能大语言模型。
    1038次使用
  • LMArena是什么?伯克利AI模型评估平台使用指南与功能解析
    LMArena
    LMArena是加州大学伯克利分校推出的AI模型匿名评测平台。通过盲测投票机制,用户可对比不同大模型回答并生成实时排行榜,助力开发者优化模型及用户选择最佳AI工具。
    1181次使用
  • 斯坦福HELM:大语言模型Holistic Evaluation整体评估框架详解
    HELM
    深入了解斯坦福推出的HELM(Holistic Evaluation of Language Models)大模型评测体系。本文解析其核心功能、安装配置步骤及应用场景,涵盖准确性、公平性、鲁棒性等多维度指标,助力开发者全面优化语言模型性能。
    1143次使用
  • MMBench详解:多模态大模型基准测试、功能特点与使用指南
    MMBench
    MMBench是由上海人工智能实验室等机构联合推出的多模态基准测试平台,提供细粒度能力评估、大规模数据集及VLMEvalKit工具。本文详细介绍其核心功能、安装使用方法及应用场景,助力开发者全面评估多模态模型性能。
    987次使用
微信登录更方便
  • 密码登录
  • 注册账号
登录即同意 用户协议 和 隐私政策
返回登录
  • 重置密码