Linux命令-slabtop(实时显示内核 slab 缓存信息)
Linux命令-slabtop实时显示内核 slab 缓存信息 简介 语法⚙️ 选项 实战示例示例 1基本 slabtop示例 2按对象数排序示例 3一次性输出 监控示例 4诊断内核内存泄漏示例 5常见 cache 名称识别示例 6与用户态内存工具对比示例 7性能调优场景示例 8自动化分析与脚本⚠️ 注意事项 总结 相关命令快速参考slabtop是实时显示 Linux 内核 slab 分配器缓存使用情况的工具类似top但专门针对内核态内存slab / slub / slob 三种分配器之一。它显示各种内核对象的缓存命中率、对象数、占用内存是诊断内核内存泄漏、内存碎片、驱动 bug的核心工具。用户态top看进程内存slabtop看内核内存。 简介项目说明命令全称slab top所属包procps-ng数据源/proc/slabinfo工作模式实时刷新默认 3 秒或一次性输出用途诊断内核态内存问题权限需要 root部分内核版本普通用户可见但不全现代替代slabtop命令本身cat /proc/slabinfo原始数据perf / bpftool高级诊断slab / slub / slob 三种分配器分配器特点用途slab原始实现复杂早期内核slub简化版Linux 默认大多数发行版slob极简版Simple List of Blocks嵌入式、小内存slab 是什么Linux 内核的小对象内存分配器替代频繁的kmalloc/kfree预先为常见对象task_struct、inode、dentry、buffer_head等建立对象池cache申请对象时从 cache 取避免反复创建/销毁解决内存碎片问题 语法slabtop[选项]⚙️ 选项选项简写说明--delayN-d N刷新间隔秒默认 3--sortSORT-s SORT排序字段见下表--once-o一次性输出不刷新--version-V版本--help-?帮助排序字段-s 可选字段含义aACTIVE 对象数b对象数/页OBJ/SLABc缓存大小CACHE SIZEl命中次数HITSn名称NAMEo活跃对象数 × 对象大小活跃内存p每页对象数 / 每 slabs对象大小OBJ SIZEu缓存使用率 实战示例示例 1基本 slabtop# 实时刷新默认 3 秒$sudoslabtop Active / Total Objects(% used):678901/1234567(55.0%)Active / Total Slabs(% used):23456/34567(67.9%)Active / Total Caches(% used):98/142(69.0%)Total / Used Memory:256789/145678OBJS ACTIVE USE OBJ SIZE SLABS OBJ/SLAB CACHE SIZE NAME456783456775%0.50K12343749360K task_struct123451098789%0.13K4123016480K dentry123451000081%0.06K2006216000K kmalloc-649876789080%1.00K2465439440K inode8765700079%0.25K5671522680K kmalloc-256...字段详解字段含义OBJS该 cache 中总对象数ACTIVE正在使用的对象数USE使用率ACTIVE/OBJS %OBJ SIZE单对象大小SLABS分配的 slab 页数OBJ/SLAB每个 slab 含多少对象CACHE SIZE该 cache 占用的总内存NAMEcache 名task_struct等头部统计行含义Active / Total Objects活跃对象 / 总对象Active / Total Slabs活跃 slab / 总 slabActive / Total Caches活跃 cache / 总 cacheTotal / Used Memory内存总量 / 使用量示例 2按对象数排序# 按 OBJS 排序看哪个 cache 对象最多$sudoslabtop-sa# 按 CACHE SIZE 排序看哪个 cache 占内存最多$sudoslabtop-sc# 按 NAME 排序$sudoslabtop-sn# 按对象大小排序$sudoslabtop-ss# 实战找出最大 cache$sudoslabtop-sc-o|head-20Active / Total Objects(% used):678901/1234567(55.0%)... OBJS ACTIVE USE OBJ SIZE SLABS OBJ/SLAB CACHE SIZE NAME102400080000078%0.50K32768324096000K dentry50000040000080%1.00K12500402000000K inode20000015000075%0.25K20001001600000K kmalloc-256...# 重点关注CACHE SIZE 大的 占用内存多示例 3一次性输出 监控# 一次性输出不刷新$sudoslabtop-o# 适合脚本处理# 监控 5 秒输出$sudoslabtop-d1-o# 每秒刷新一次# 录制到文件做趋势分析$sudoslabtop-d5-o/var/log/slab.log# 持续 5 秒间隔输出# 配合 grep$sudoslabtop-o|grep-Edentry|inode|task_structOBJS ACTIVE USE OBJ SIZE SLABS OBJ/SLAB CACHE SIZE NAME456783456775%0.50K12343749360K task_struct123451098789%0.13K4123016480K dentry9876789080%1.00K2465439440K inode示例 4诊断内核内存泄漏# 场景系统内存持续增长怀疑内核泄漏# 1. 第一次记录$sudoslabtop-o/tmp/slab_1.txt $date2024-01-1514:30:00# 2. 等待 5 分钟$sleep300# 3. 第二次记录$sudoslabtop-o/tmp/slab_2.txt $date2024-01-1514:35:00# 4. 对比$diff/tmp/slab_1.txt /tmp/slab_2.txt# 找出增长最快的 cache# 例如dentry 数量持续增长 文件系统相关驱动有问题# 例如nf_conntrack 持续增长 防火墙连接表泄漏# 例如vm_area_struct 持续增长 进程内存映射泄漏# 5. 实战自动化监控$cat/opt/scripts/slab_monitor.sh#!/bin/bashLOG/var/log/slab_growth.logTHRESHOLD10000# 5 分钟增长阈值prev_count0prev_namewhiletrue;do# 取 cache 中最大 5 个output$(slabtop-o|head-7|tail-5)# 提取最大 cachemax$(echo$output|tail-1)name$(echo$max|awk{print $NF})objs$(echo$max|awk{print $1})# 检测增长if[$name$prev_name][$((objs-prev_count))-gt$THRESHOLD];thenecho[$(date)] 警告:$name增长$((objs-prev_count))个对象$LOGlogger-pkern.warningSlab cache$namegrowing:$objsfiprev_name$nameprev_count$objssleep300done示例 5常见 cache 名称识别# 1. 进程相关 $sudoslabtop-o|grep-Etask_struct|signal|files_struct# task_struct: 进程描述符每个进程 1 个# signal_struct: 信号结构# files_struct: 进程打开的文件# 2. 文件系统相关 $sudoslabtop-o|grep-Edentry|inode|buffer_head# dentry: 目录项**最常见大对象**# inode: 文件元数据# buffer_head: 文件页缓存# 3. 网络相关 $sudoslabtop-o|grep-Esk_buff|sock|nf_conn# sk_buff: 网络数据包**网络性能关键**# sock: 套接字# nf_conn: netfilter 连接追踪# 4. 内存管理 $sudoslabtop-o|grep-Evm_area|page|mm_struct# vm_area_struct: 进程的虚拟内存区# page: 内核页帧描述符# 5. 驱动相关 $sudoslabtop-o|grep-Escsi|usb|kvm# 各类驱动对象# 实战dentry 增长 目录项泄漏 $sudoslabtop-sc-o|head-10OBJS ACTIVE USE OBJ SIZE SLABS OBJ/SLAB CACHE SIZE NAME102400080000078%0.13K32768324096K dentry# 如果持续增长# 1. 检查是否有进程持续打开/关闭目录# 2. 检查 NFS / FUSE 挂载# 3. 同步检查 /proc/sys/fs/dentry-state$cat/proc/sys/fs/dentry-state13456710987645000# nr_dentry / nr_unused / age_limit / ...# 手动清理$echo2/proc/sys/vm/drop_caches# 释放 dentry inode cache示例 6与用户态内存工具对比# 1. 用户态 vs 内核态 # 用户态top / ps$top# 字段VIRT虚拟/ RES实际/ SHR共享# 这些是**进程**的用户态内存# 内核态slabtop$sudoslabtop# 字段OBJS / SLABS / CACHE SIZE# 这些是**内核对象**的内存# 2. 完整内存视图 # 总览$free-htotal usedfreeshared buff/cache available Mem:7.7G1.2G4.0G 100M2.5G6.0G# total 物理 RAM# used 已用用户 内核 缓存# buff/cache 内核页缓存**会自动回收**# available **真正可用**含可回收缓存# 内核 slab 占多少$sudoslabtop-o|head-1Active / Total Objects(% used):678901/1234567(55.0%)Total / Used Memory:256789/145678# Used Memory 内核 slab 占用的内存# 用户态 内核态 完整内存占用# 3. /proc/meminfo 详细信息 $grep-ESlab|SReclaimable|SUnreclaim/proc/meminfo Slab:145678kB SReclaimable:87654kB ← 可回收的 slab SUnreclaim:58024kB ← 不可回收的 slab# SReclaimable SUnreclaim Slab# 4. 完整内存全景图 $cat/proc/meminfo|head-30MemTotal:8057892kB MemFree:4123456kB MemAvailable:6234567kB Buffers:123456kB Cached:2098765kB SwapCached:0kB Active:1234567kB Inactive:1876543kB Active(anon):456789kB Inactive(anon):123456kB Active(file):777778kB Inactive(file):1753087kB Unevictable:0kB Mlocked:0kB SwapTotal:2097148kB SwapFree:2097148kB Dirty:123kB Writeback:0kB AnonPages:580245kB Mapped:234567kB Shmem:123456kB KReclaimable:87654kB Slab:145678kB SReclaimable:87654kB SUnreclaim:58024kB KernelStack:5678kB PageTables:12345kB...示例 7性能调优场景# 场景 1网络服务器 sk_buff 增长 # 表现网卡丢包、网络延迟# 检查$sudoslabtop-o|grep-Esk_buffOBJS ACTIVE USE OBJ SIZE SLABS OBJ/SLAB CACHE SIZE NAME20000018000090%0.25K625032200000K skbuff_head_cache# 90% 使用率 接近上限可能在网络高负载时丢包# 解决# 1. 调整 netdev_max_backlog$sudosysctl-wnet.core.netdev_max_backlog2000# 2. 调整 socket 缓冲区$sudosysctl-wnet.core.rmem_max12582912$sudosysctl-wnet.core.wmem_max12582912# 场景 2dentry 缓存不足 # 表现磁盘 IO 高、stat() 慢# 解决调大 /proc/sys/vm/vfs_cache_pressure$cat/proc/sys/vm/vfs_cache_pressure100# 调小保留更多 dentry$sudosysctl-wvm.vfs_cache_pressure50# 场景 3进程泄漏 task_struct # 表现进程数持续增长$ps-e|wc-l# 对应 slabtop 中 task_struct 增长# 解决定位并 kill 泄漏进程$psaux--sort-%mem|head-20# 找出大内存进程# 场景 4nf_conntrack 满 $sudoslabtop-o|grepnf_conn OBJS ACTIVE USE OBJ SIZE SLABS OBJ/SLAB CACHE SIZE NAME262144262144100%0.31K8192321048576K nf_conntrack# 100% 使用 防火墙连接表已满新连接被拒绝# 解决$sudosysctlnet.netfilter.nf_conntrack_max524288$sudosysctlnet.netfilter.nf_conntrack_tcp_timeout_established600# 调大连接上限 缩短超时示例 8自动化分析与脚本# 1. slab 持续监控脚本 $cat/opt/scripts/slab_watch.sh#!/bin/bash# 每 60 秒记录一次 slabtop 输出LOG_DIR/var/log/slabmkdir-p$LOG_DIRwhiletrue;doTS$(date%F_%H%M%S)slabtop-o$LOG_DIR/slab_$TS.txt# 清理 7 天前find$LOG_DIR-nameslab_*.txt-mtime7-deletesleep60done# 2. 大 cache 告警 $cat/opt/scripts/slab_alert.sh#!/bin/bash# 监控 cache 1GBTHRESHOLD_KB1048576# 1GBslabtop-o|tail-n7|awk-vthresh$THRESHOLD_KB { cache_kb $7 gsub(K, , cache_kb) if (cache_kb thresh) { print [ALERT] $8 cache 使用 cache_kb K 内存 } }|whilereadline;dologger-pkern.warningSlab:$lineecho$line# 可加钉钉/邮件通知done# 3. 与其他监控集成 $cat/opt/scripts/slab_to_prometheus.sh#!/bin/bash# 转换 slabtop 为 prometheus 文本格式OUT/var/lib/node_exporter/textfile/slab.promecho# HELP slab_cache_bytes Total bytes used by kernel slab cache$OUTecho# TYPE slab_cache_bytes gauge$OUTslabtop-o|tail-n7|awk { cache_kb $7 gsub(K, , cache_kb) gsub(M, 000, cache_kb) cache_bytes cache_kb * 1024 name $8 gsub(-, _, name) print slab_cache_bytes{name\ name \} cache_bytes }$OUT# prometheus node_exporter 采集# 配合 grafana 画图⚠️ 注意事项1. 需要 root 权限普通用户执行slabtop会显示受限数据仅当 kernel.yama.ptrace_scope0 且/proc/slabinfo全员可读。生产中必须 sudo。2. /proc/slabinfo 内核选项部分内核配置CONFIG_SLAB关闭时/proc/slabinfo不存在。检查$cat/proc/slabinfo2/dev/null|head# 无输出 内核不导出内核 2.6.32 或嵌入式系统可能没。3. SLAB vs SLUB vs SLOB 输出差异SLUB现代默认字段最全SLAB老内核字段少SLOB嵌入式几乎无数据现代 Linux 都是 SLUB。4. 高频率刷新影响slabtop -d 1每秒刷新会持续读取/proc/slabinfo。大量 cache几万时读取可能10-50ms 延迟。监控系统别用 5 秒间隔。5. 排序字段大小写slabtop -s a活跃对象数和-s A某些版本含义不同。用--sort长格式更稳。6. 名称中-的转义很多 cache 名含-kmalloc-64、nf_conn。grep/awk 处理时用引号或转义。7. 与 /proc/meminfo 的关系slabtop头部 “Used Memory” /proc/meminfo中Slab字段。但只展示部分不是全部 cache。完整数据看/proc/slabinfo原始文件。8. 容器内的局限Docker 默认 PID 命名空间隔离容器内slabtop看到的是宿主机全局。也可能因 cgroup 限制看到不同视图。9. 数值单位slabtop默认千字节K。OBJ SIZE是单对象大小带K。实际 K 1024 字节不是 1000。10. 优化建议如果某个 cache 持续 100% 满且不能回收检查驱动 bug升级内核调整/proc/sys/vm/*参数重启服务/系统最后手段启用slab_nomerge避免误合并使用 BPF 工具做精细分析 总结slabtop是内核内存的 top——专门看 slab 分配器。本节要点核心定位用户态内存用top/ps内核态内存用slabtop关键字段OBJS/ACTIVE/USE/OBJ SIZE/SLABS/CACHE SIZE/NAME诊断场景内核内存增长 → 观察哪个 cache 在涨dentry 增长 → 目录项泄漏/缓存压力sk_buff 满 → 网络高负载nf_conntrack 满 → 防火墙拒绝连接数据源/proc/slabinfoslabtop是美化器配合使用free整体内存/proc/meminfoslab 详细vmstatslab 回收ps用户态进程内存最终建议日常巡检slabtop -s c -o看最大 5 个 cache内存告警配合/proc/meminfo中 Slab 字段深度诊断用perf/bpftool抓具体内核对象生产监控导出 prometheus 指标。 相关命令命令用途slabtop实时 slab 信息本节top/htop用户态进程资源free物理内存概览cat /proc/slabinfoslab 原始数据cat /proc/meminfo详细内存信息vmstat虚拟内存统计ps aux进程详情pmap进程内存映射sysctl调整内核参数echo N /proc/sys/vm/drop_caches手动回收缓存perf性能分析bpftoolBPF 工具高级numastatNUMA 内存统计sysstat/sar -r内存历史crash内核转储分析vmcore

相关新闻

C++与SFML实现《愤怒的小鸟》物理引擎与碰撞检测详解

C++与SFML实现《愤怒的小鸟》物理引擎与碰撞检测详解

1. 项目概述:从物理弹射到代码实现几年前,当《愤怒的小鸟》风靡全球时,我就在想,这个看似简单的游戏背后,其物理引擎和碰撞逻辑是如何被精妙地构建出来的。作为一个长期使用C进行图形和游戏逻辑开发的从业者&#xff0…

2026/10/14 4:55:36 阅读更多 →
主流输入法横向评测:从词库算法到隐私安全,如何选择最适合你的打字工具?

主流输入法横向评测:从词库算法到隐私安全,如何选择最适合你的打字工具?

1. 输入法:我们指尖上的“第二大脑” 每天,我们通过键盘、触摸屏与数字世界对话,而输入法就是这场对话的翻译官。从PC时代的智能ABC、微软拼音,到如今手机上琳琅满目的搜狗、百度、讯飞、微信输入法,它早已超越了简单的…

2026/10/9 9:24:11 阅读更多 →
链表 —— 142 环形链表Ⅱ 难点拆解!快慢指针如何找到环入口?动图解原理!

链表 —— 142 环形链表Ⅱ 难点拆解!快慢指针如何找到环入口?动图解原理!

力扣 142 环形链表Ⅱ 给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环&#xff0c…

2026/10/14 11:01:31 阅读更多 →

最新新闻

Advanced Installer 15.2汉化完全指南:版本匹配、覆盖验证与避坑

Advanced Installer 15.2汉化完全指南:版本匹配、覆盖验证与避坑

简介:Advanced Installer(高级安装程序)15.2汉化版是一款面向Windows应用开发者和系统管理员的专业打包部署工具,基于MSI技术,可快速生成符合Windows Installer标准的安装包,并支持自定义安装向导界面、编写…

2026/10/14 13:52:00 阅读更多 →
光子晶体平带与BIC仿真:COMSOL高Q偏振可控光源建模全链路

光子晶体平带与BIC仿真:COMSOL高Q偏振可控光源建模全链路

简介:本资源是面向光学仿真初学者与光子晶体研究者的COMSOL实操复现包,聚焦光子晶体中平带合并与束缚态在连续态(BIC)的核心物理现象,解决二维/三维能带计算、品质因子提取及远场偏振分析等关键建模难题。压缩包共10个…

2026/10/14 13:52:00 阅读更多 →
4G EPC到5G核心网不是升级而是架构重建

4G EPC到5G核心网不是升级而是架构重建

1. 为什么“4G EPC 到 5G 5GC”不是升级,而是重建?你刚接触移动通信网络时,大概率会听到一句很顺口的话:“5G 就是把 4G 升级一下,加点带宽、快点速度。”这话听着合理,但从业十年、亲手部署过三套商用核心…

2026/10/14 13:52:00 阅读更多 →
毕业答辩PPT模板改造指南:母版、配色与图表重绘

毕业答辩PPT模板改造指南:母版、配色与图表重绘

简介:这是一份面向高校本科毕业生的毕业论文答辩PPT模板,适用于北京石油化工学院等院校的学位论文答辩场景,也可供其他专业学生参考套用。模板整体风格精美大气,结构完整,涵盖研究背景及意义、研究思路及方法、研究目的…

2026/10/14 13:52:00 阅读更多 →
OpenMontage实战:配置驱动的自动视频拼贴流水线解析

OpenMontage实战:配置驱动的自动视频拼贴流水线解析

1. 我为什么会盯上OpenMontage:从手动剪辑到批量拼贴最近一个需求让我对“自动生成视频蒙太奇”这条路彻底改观:每周末都要给社团的活动出一条30到60秒的回顾视频,素材倒是攒了上百条,可每次打开剪辑软件,光是把有用的…

2026/10/14 13:52:00 阅读更多 →
WebGL光栅化原理与性能优化实践

WebGL光栅化原理与性能优化实践

1. 光栅化基础概念与WebGL关系光栅化(Rasterization)是计算机图形学中将矢量图形转换为像素矩阵的核心技术流程。在WebGL的渲染管线中,光栅化阶段位于顶点着色器处理之后,负责把经过变换的3D图元(通常是三角形&#xf…

2026/10/14 13:50:59 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 7:53:34 阅读更多 →