深入内存指标是什么
内存到底够不够,看空闲内存几乎没有意义:内核会把大量内存用作缓存,空闲数字小反而是正常现象。真正的判断依据在内存统计文件里:可分配内存是估算出的还能分配的量,脏页与回写字段反映尚未落盘的数据,内核对象占用与其中可回收的部分体现内核层开销,已提交内存总量则能提示超售风险。把这些指标组合起来看,才能分清「内存被缓存占用」与「确实不够用」。
基本信息
| 适用平台 | GNU/Linux(基于内核的内存统计) |
|---|---|
| 数据来源 | /proc/meminfo |
| 关键指标 | 总量、空闲、可分配、缓存、脏页、回写、内核对象、已提交内存 |
| 单位 | 多数条目以 kB 显示 |
| 辅助工具 | slabtop 查看内核对象占用明细 |
| 提醒 | 单次快照分不清正常波动与内存泄漏 |
典型使用场景
- 判断内存不足告警是否真实:先看可分配内存而不是空闲内存。
- 排查写入性能差:脏页长期居高说明回写跟不上磁盘。
- 评估内核对象占用是否异常增长,怀疑内核层泄漏。
- 判断是否过度分配内存,评估内存溢出风险。
- 对比重启前后、变更前后同一指标的变化趋势。
常用写法
常用写法
grep -E 'MemTotal|MemFree|MemAvailable|Cached|Dirty|Writeback|Slab|SReclaimable|Committed_AS' /proc/meminfo
awk '/Dirty/ {print $2/1024 " MB dirty"}' /proc/meminfo # 脏页换算成 MB
awk '/MemAvailable/ {print $2/1024 " MB 可分配"}' /proc/meminfo
slabtop -o | head # 内核对象占用排行
grep -E 'SwapTotal|SwapFree' /proc/meminfo # 交换区使用情况
watch -n 60 "grep -E 'MemAvailable|Dirty' /proc/meminfo" # 多点采样看趋势指标逐项读法
| 指标 | 含义 | 判断要点 |
|---|---|---|
| 物理内存总量 | 机器总内存 | 所有指标的基准 |
| 完全空闲内存 | 未被使用的内存 | 数值小通常正常,缓存会占满空闲 |
| 可分配内存 | 估算还能分配的量 | 判断内存是否充足的首选指标 |
| 脏页 | 等待回写的页 | 长期居高说明磁盘写入跟不上 |
| 内核对象占用 | Slab 总量与可回收部分 | 持续增长且不可回收要警惕内核泄漏 |
| 已提交内存 | 系统已承诺的内存 | 远超物理内存时存在溢出风险 |
读单个数字没有意义:内存指标抖动很大,要在固定间隔上多点采样看趋势,才能区分正常波动与持续增长。
内核对象占用持续增长且可回收部分不跟着增长,通常指向内核层泄漏;这类问题往往需要升级内核或评估重启来缓解。
已提交内存远超物理内存意味着系统允许的分配总量已经透支,一旦多个进程同时真正使用这些内存就会触发内存溢出。