文件是什么
/proc/vmstat 汇集内核虚拟内存子系统的累计计数器:pgpgin/pgpgout 反映页的进出 IO,pswpin/pswpout 反映换入换出,pgmajfault 反映主缺页,pgscan_kswapd/pgscan_direct 与 allocstall 反映回收与分配停顿,oom_kill 反映实际终止次数。所有数值都从开机起单调累加,价值在于差分后的速率与长期趋势,它也是监控系统内存类指标的原始数据源。
基本信息
| 文件路径 | /proc/vmstat |
|---|---|
| 数据性质 | 全部为累计计数,必须两次采样求差 |
| IO 计数 | pgpgin、pgpgout |
| 换页计数 | pswpin、pswpout |
| 回收计数 | pgscan_kswapd、pgscan_direct、pgsteal_* |
| 分配停顿 | allocstall 系列(按 zone 分类) |
| 缺页与 OOM | pgfault、pgmajfault、oom_kill |
典型使用场景
- 判断系统是否频繁直接回收:pgscan_direct 与 allocstall 的增量是关键证据
- 确认换页是否活跃:pswpout 持续增长说明内存压力已传导到磁盘
- 量化主缺页速率,解释应用启动或内存紧张时的延迟
- 为监控告警提供原始计数,差分得到每秒速率后再设阈值
- 与 cgroup 指标对照,区分压力来自全局还是某个容器
提取与对照
提取与对照
grep -E '^(pgpgin|pgpgout|pswpin|pswpout)' /proc/vmstat # 页 IO 与换页累计
grep -E '^(pgscan_direct|pgscan_kswapd|pgsteal_normal)' /proc/vmstat # 回收扫描与回收量
grep -E '^(allocstall|oom_kill)' /proc/vmstat # 分配停顿与 OOM 终止
grep -E '^(pgfault|pgmajfault)' /proc/vmstat # 缺页计数
sar -B 1 5 # 直接给出换页与回收的每秒速率,省去手工差分
vmstat 1 5 # 关注 si/so 两列是否持续非零关键计数读法
| 计数 | 含义 | 判读要点 |
|---|---|---|
| pgpgin / pgpgout | 页的读入与写出次数 | 反映整体页 IO 量,不区分设备 |
| pswpin / pswpout | 换入换出的页数 | 持续增长说明内存压力已转成磁盘 IO |
| pgmajfault | 主缺页次数(需要磁盘 IO) | 速率高代表访问路径有磁盘等待 |
| pgscan_direct | 直接回收扫描的页数 | 增量大说明回收被压到分配路径上 |
| allocstall | 分配时被迫直接回收的次数 | 延迟敏感系统最该盯的信号 |
| oom_kill | OOM 终止次数 | 非零即需复盘 |
这些计数从开机起只增不减,任何判断都要基于两次采样之间的增量,并按时间间隔换算成速率。直接拿绝对值与阈值比较是常见误用。
不同内核版本的计数项会有增删(例如 allocstall 系列的分类方式)。采集脚本应容忍字段缺失,不要因为某个计数不存在而整段解析失败。