news 2026/6/16 3:35:41

Linux Slab 使用与泄漏判断完整笔记

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Linux Slab 使用与泄漏判断完整笔记

目录标题

  • Linux Slab 使用与泄漏判断完整笔记
    • 一、Slab 基础认知(先统一共识)
      • 1. 什么是 Slab
      • 2. 一个核心原则
    • 二、slabtop 输出如何正确解读
      • 常用命令
      • 关键字段说明
    • 三、最容易误判的点(重点)
      • 1️⃣ Active / Total Objects ≈ 100% 正常吗?
    • 四、判断 Slab 是否异常的正确方法(标准流程)
      • Step 1:锁定“嫌疑 slab”
      • Step 2:多次采样,看趋势(最重要)
        • 方法一:slabtop 连续观察
        • 方法二:对比 /proc/slabinfo(更严谨)
      • Step 3:结合内存回收能力一起判断
        • 判断逻辑
    • 五、不同 Slab 的“风险等级速查表”
      • 🔴 高风险(需要重点关注)
      • 🟢 低风险(通常为正常缓存)
    • 六、典型业务场景与 Slab 特征
      • 1️⃣ 文件系统 / 日志 / 数据库
      • 2️⃣ 容器 / K8s 节点
      • 3️⃣ 网络 / 高并发服务
    • 七、进阶:确认是否真实泄漏(慎用)
      • kmemleak
      • slab trace(生产慎用)
    • 八、可以直接写进报告的总结模板
    • 九、一句话工程师心法

Linux Slab 使用与泄漏判断完整笔记

适用场景:

  • 线上主机 / 容器节点内存占用偏高
  • slabtop看到大量kmalloc-* / dentry / inode
  • 需要判断是否 slab 泄漏,还是正常缓存行为

一、Slab 基础认知(先统一共识)

1. 什么是 Slab

  • Slab 是 Linux 内核用于小对象内存分配的机制

  • 常用于:

    • inode / dentry
    • socket / skbuff
    • kmalloc
    • 文件系统 / 网络 / 内核子系统

2. 一个核心原则

Slab 的设计目标就是“尽量缓存、尽量用满”

因此:

  • Slab 大 ≠ 问题
  • Active 接近 100% ≠ 泄漏

二、slabtop 输出如何正确解读

常用命令

slabtop -o -s c|head-20

关键字段说明

字段含义
OBJS已分配对象总数
ACTIVE正在使用的对象
USEACTIVE / OBJS
CACHE SIZE该 slab 实际占用内存

三、最容易误判的点(重点)

1️⃣ Active / Total Objects ≈ 100% 正常吗?

大多数情况下是正常的

原因:

  • 内核 cache 会尽量保持对象被复用
  • 业务活跃时 Active 本就会很高

泄漏的核心不是“用得多”,而是:

用完之后不释放,且数量持续增长


四、判断 Slab 是否异常的正确方法(标准流程)

Step 1:锁定“嫌疑 slab”

重点关注:

  • kmalloc-*
  • buffer_head
  • skbuff_head_cache
  • TCP

记录 cache 名称,例如:

kmalloc-1k kmalloc-512

Step 2:多次采样,看趋势(最重要)

方法一:slabtop 连续观察
watch-n5slabtop -o -s c

判断标准

行为结论
CACHE SIZE 有涨有跌正常缓存
CACHE SIZE 单向增长⚠️ 泄漏嫌疑

方法二:对比 /proc/slabinfo(更严谨)
grepkmalloc-1k /proc/slabinfosleep60grepkmalloc-1k /proc/slabinfo

关注字段:

  • active_objs
  • num_objs
  • slabs
指标变化判断
波动正常
持续增长⚠️ 异常

Step 3:结合内存回收能力一起判断

cat/proc/meminfo|egrep'Slab|SReclaimable|SUnreclaim'
判断逻辑
情况结论
SReclaimable 占比高可回收 cache
SUnreclaim 持续增长⚠️ 真正风险

Slab 泄漏几乎一定体现在 SUnreclaim 上


五、不同 Slab 的“风险等级速查表”

🔴 高风险(需要重点关注)

Slab含义
kmalloc-*内核模块 / 驱动
buffer_headBlock IO
skbuff_head_cache网络
TCPsocket

🟢 低风险(通常为正常缓存)

Slab含义
dentry路径缓存
inode_cacheinode
radix_tree_nodepage cache
proc_inode_cache/proc

dentry / inode 再大,也极少是泄漏


六、典型业务场景与 Slab 特征

1️⃣ 文件系统 / 日志 / 数据库

  • dentry
  • inode_cache
  • radix_tree_node

2️⃣ 容器 / K8s 节点

  • proc_inode_cache
  • ovl_inode
  • dentry

3️⃣ 网络 / 高并发服务

  • TCP
  • skbuff
  • kmalloc-*

七、进阶:确认是否真实泄漏(慎用)

kmemleak

echoscan>/sys/kernel/debug/kmemleakcat/sys/kernel/debug/kmemleak

slab trace(生产慎用)

echo1>/sys/kernel/slab/kmalloc-1k/trace

八、可以直接写进报告的总结模板

slab 是否异常不能依据单次 slabtop 输出判断,而应通过多次采样观察同一 cache 的对象数与 cache size 是否持续单向增长。若在业务负载稳定前提下,kmalloc-*等 slab 的num_objs / slabs持续增长,且SUnreclaim同步上升,则可初步判断存在 slab 泄漏风险。


九、一句话工程师心法

看 slab:先看类型,再看趋势,最后看 SUnreclaim。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/15 12:28:05

Sambert-HifiGan在虚拟偶像中的应用:AI角色语音

Sambert-HifiGan在虚拟偶像中的应用:AI角色语音 引言:中文多情感语音合成的技术演进与虚拟偶像需求 随着虚拟偶像产业的爆发式增长,高质量、富有情感表现力的语音合成技术已成为构建沉浸式人机交互体验的核心环节。传统TTS(Text-t…

作者头像 李华
网站建设 2026/6/4 21:04:11

用Sambert-HifiGan打造虚拟主播:情感语音合成实战

用Sambert-HifiGan打造虚拟主播:情感语音合成实战 📌 引言:让虚拟主播“声”动起来 在虚拟主播、AI助手、有声书生成等应用场景中,自然且富有情感的语音合成(TTS) 已成为提升用户体验的核心能力。传统的TTS…

作者头像 李华
网站建设 2026/6/11 8:10:23

混沌工程与SIBR测试结合:构建高韧性软件系统的创新策略

韧性测试的新范式 在当今分布式系统和微服务架构盛行的时代,软件失效可能导致灾难性后果(如金融损失或用户信任崩塌)。混沌工程(Chaos Engineering)通过主动注入故障来验证系统韧性,而SIBR测试&#xff08…

作者头像 李华
网站建设 2026/6/11 8:54:53

每周读书与学习-amp;gt;JMeter性能测试脚本编写实战(三)如何利用JMeter为MySQL数据库构造测试数据

每周读书与学习是由清华大学出版社出版的《JMeter核心技术、性能测试与性能分析》一书的作者推出,分享作者多年的IT从业经历,希望对很多计算机科学技术IT类专业毕业生以及IT从业者有所帮助。 在前面的学习中,介绍了很多Jmeter的理论知识&…

作者头像 李华
网站建设 2026/6/10 0:31:18

存储空间规划:合理管理海量输出视频

存储空间规划:合理管理海量输出视频 引言:从生成到存储的工程挑战 随着 AIGC 技术的快速发展,Image-to-Video 图像转视频生成器已成为内容创作领域的重要工具。由科哥主导二次开发的这一版本,基于 I2VGen-XL 模型构建,…

作者头像 李华
网站建设 2026/6/10 23:33:03

3D GS编辑

GitHub - sparkjsdev/spark: :sparkles: An advanced 3D Gaussian Splatting renderer for THREE.js

作者头像 李华