文件是什么
PSI 的内存视图在 /proc/pressure/memory:some 表示至少有一个任务因为内存不足(等分配、等回收)而停顿的时间占比,full 表示所有可运行任务都被内存相关操作挡住的时间占比。内存与 IO 是仅有的两个提供 full 语义的资源,因此 full 行是判断「系统级卡顿」的关键信号;avg300 更适合观察长期趋势,绝对值需要靠差分理解增量。
基本信息
| 文件路径 | /proc/pressure/memory;cgroup 视图为 <组>/memory.pressure |
|---|---|
| 字段 | some 与 full 各自带 avg10、avg60、avg300 与 total |
| 前提 | 内核 CONFIG_PSI=y,部分版本需要 psi=1 启动参数 |
| 语义差异 | some 表示至少一个任务受影响,full 表示全部任务被挡 |
| 配套指标 | memory.events、/proc/vmstat 的回收与换页计数 |
| 观测视角 | 全局文件是宿主视图,cgroup 文件才代表该组自身 |
典型使用场景
- 定位容器内存压力:把 memory.pressure 与 memory.events 结合看是限额还是节点资源问题
- 区分「内存不够」与「内存够但回收慢」:前者 some 与 full 同时上升,后者多表现为回收计数高
- 量化 swap 使用带来的停顿,判断是否应该限制换出
- 评估 memory.high 软限额的代价:节流期间 pressure 会明显抬高
- 容量规划:在压测中记录不同负载下的 avg60,找出压力上扬的拐点
查看与交叉验证
查看与交叉验证
cat /proc/pressure/memory # 全局视图,包含 some 与 full 两行
cat /sys/fs/cgroup/myapp.slice/memory.pressure # 只看该 cgroup 的压力
awk '/full/{print $1,$2,$3,$4}' /proc/pressure/memory # 单独看 full 的三个时间窗均值
cat /sys/fs/cgroup/myapp.slice/memory.events # 交叉验证:high/max/oom_kill 计数
grep -E 'allocstall|pgscan_direct|pswpout' /proc/vmstat # 回收与换出的原始计数
vmstat 1 5 # 观察 si/so 是否持续非零,判断是否在频繁换页行与字段读法
| 行/字段 | 含义 | 判读要点 |
|---|---|---|
| some | 至少一个任务因内存而停顿 | 偶发增长在批量回收时常见 |
| full | 所有可运行任务都被内存操作挡住 | 持续增长才说明系统级卡顿 |
| avg10/60/300 | 不同时间窗的停顿百分比 | 趋势看 avg300,即时看 avg10 |
| total | 累计停顿微秒 | 必须两次采样求差 |
full 行持续增长才代表到了全局受制的程度;some 偶发上升在页缓存回刷、周期性回收时属于正常现象,单凭 some 增长不能断定内存不足。
内存压力可能来自物理内存不足,也可能来自 cgroup 限额。容器里出现 full 增长时,先对照 memory.events 与 memory.max:若 high/max 计数同步增长,多半是本组限额过紧而非节点资源告急。