slabtop 是 linux 内核 slab 分配器实时监控工具,需 root 权限,支持按缓存大小(-s c)、活跃对象数(-s a)等排序及自定义刷新间隔(-d),关键字段包括 objs、active、use%、obj size、slabs、ssize 和 cache size,常用于排查内存泄漏与缓存效率问题。

slabtop 是 Linux 系统中用于实时监控内核 slab 分配器使用情况的命令行工具,能直观显示各类内核对象(如 inode、dentry、buffer_head 等)的缓存占用、活跃/非活跃数量、内存大小及每对象开销等信息。
基本用法与常用选项
直接运行 slabtop 即可进入交互式界面(需 root 权限才能看到完整数据):
- slabtop —— 默认按活跃对象数排序,实时刷新
- slabtop -o —— 关闭自动刷新,适合截图或单次快照
- slabtop -s c —— 按缓存总大小(cache size)降序排列
- slabtop -s a —— 按活跃对象数(active objects)排序
- slabtop -d 2 —— 每 2 秒刷新一次(默认是 1 秒)
关键字段解读
交互界面顶部显示全局统计,主体表格包含以下核心列:
- OBJS:当前缓存中已分配的对象总数
- ACTIVE:当前正在被使用的活跃对象数
- USE%:活跃率 = ACTIVE / OBJS × 100%,过低可能暗示缓存泄漏或回收不及时
- OBJ SIZE:每个对象占用的字节数(含对齐和元数据)
- SLABS:该缓存使用的 slab 页块数
- SSIZE:每个 slab 的大小(如 8k、64k),取决于对象大小和对齐策略
- CACHE SIZE:该缓存总内存占用 ≈ SLABS × SSIZE
常见高占用缓存及排查思路
重点关注 CACHE SIZE 大或 USE% 异常低(
- dentry 和 inode:文件系统路径查找和元数据缓存。大量小文件操作、未关闭的目录句柄、NFS 挂载异常都可能导致其持续增长
- ext4_inode_cache 或 xfs_inode:对应具体文件系统,结合 df -i 和 ls -R 可辅助判断是否 inode 耗尽
- buffer_head:块设备 I/O 缓存,突发写入或脏页回写延迟高时会上升
- task_struct:进程描述符缓存,若持续增长且 ACTIVE 接近 OBJS,需检查是否有僵尸进程或 fork 风暴
配合其他工具深入分析
slabtop 提供的是“是什么”,进一步定位需结合:
- cat /proc/slabinfo —— 获取原始数据,支持脚本解析;字段含义与 slabtop 一致但更全
- find /sys/kernel/slab/ -name '*/stats' —— 查看特定缓存的详细统计(如 allocs、frees、deactivates)
- echo 2 > /proc/sys/vm/drop_caches —— 清理 pagecache、dentries 和 inodes(仅测试环境慎用)
- perf probe slab_alloc_node + perf record —— 追踪高频分配点(需 kernel-debuginfo)










