free -w 不显示 Slab 内存,仅将 buff/cache 拆分为 buffers 和 cache 两列;Slab(含 SReclaimable/SUnreclaim)需通过 /proc/meminfo 或 slabtop 查看。

free -w 本身不会显示 Slab 内存,它只是将 buff/cache 列拆分为独立的 buffers 和 cache 两列(即“宽模式”),让输出超过 80 字符、更清晰地区分缓冲区与页缓存。但 Slab(内核对象缓存,如 dentry、inode、slab 分配器管理的结构)不在 free 的默认或 -w 输出字段中。
Slab 内存属于内核内存的一部分,被统计在 /proc/meminfo 的 SReclaimable(可回收 Slab)和 SUnreclaim(不可回收 Slab)中,而 free 命令不解析或展示 Slab 相关字段,无论是否加 -w。
想看含 Slab 的详细内存分布,应这样操作:
✅ 正确方法:结合 /proc/meminfo 查看完整分类
直接读取原始数据源,包含 Slab 全量信息:
grep -i -E "^(MemTotal|MemFree|Buffers|Cached|SReclaimable|SUnreclaim|Shmem|SwapTotal|SwapFree)" /proc/meminfo
输出示例:
MemTotal: 16265344 kB MemFree: 2145672 kB Buffers: 128432 kB Cached: 6890124 kB SReclaimable: 425680 kB ← 可回收 Slab(如 dentry/inode 缓存) SUnreclaim: 189344 kB ← 不可回收 Slab(如某些内核数据结构) Shmem: 152304 kB ← 共享内存(tmpfs)
? 提示:
SReclaimable + SUnreclaim = Slab总量;其中SReclaimable属于buff/cache的一部分(会被free归入cache),但free不单独列出。
✅ 补充工具:用 slabtop 实时查看 Slab 对象详情
slabtop -o # -o 表示一次快照(非实时滚动),适合脚本或快速查看
它会列出各 slab cache 名称、对象数量、大小、使用率等,比如 dentry、inode_cache、ext4_inode_cache 等,是分析 Slab 泄漏的首选。
❌ free -w 能做什么?不能做什么?
- ✅ 能:把原
buff/cache拆成buffers和cache两列,提升可读性 - ❌ 不能:显示
Slab、PageTables、KernelStack、CommitLimit等/proc/meminfo中的其他关键项 - ❌ 不能:通过任何
free参数(包括-l,-t,-h,-w组合)扩展出 Slab 字段
⚠️ 注意:
free -l(高低内存统计)仅对32 位系统有意义,现代 64 位系统该选项无实际效果,也不涉及 Slab。
快速对比:free vs /proc/meminfo 关键字段映射
/proc/meminfo 字段 |
是否出现在 free 中 |
说明 |
|---|---|---|
MemTotal |
total(Mem 行) |
物理内存总量 |
MemFree |
free(Mem 行) |
完全未使用的内存页 |
Buffers |
单独列为 buffers(需 -w) |
块设备 I/O 缓冲 |
Cached + SReclaimable + Shmem
|
合并为 buff/cache(或 -w 下的 cache) |
可回收的页缓存总和 |
SReclaimable |
❌ 不出现 | Slab 中可回收部分(如文件缓存元数据) |
SUnreclaim |
❌ 不出现 | Slab 中长期驻留部分(如某些内核结构体) |
小结建议
- 要概览内存压力 → 用
free -h或free -wh(宽+人类可读) - 要区分 buffers 和 cache → 加
-w即可 - 要定位 Slab 占用或排查内核内存异常 → 必须查
/proc/meminfo或运行slabtop - 不要尝试
free -w --slab或类似组合 —— 这类参数不存在,free没有 Slab 支持
Slab 是内核内存管理的底层机制,free 定位的是用户可见的“可用性”视图,深度诊断需下沉到 /proc 接口。


















