news 2026/2/9 22:35:52

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/2/8 1:05:23

三大图像转视频模型对比:推理速度、显存占用、部署难度评测

三大图像转视频模型对比:推理速度、显存占用、部署难度评测 随着AIGC技术的快速发展,图像到视频(Image-to-Video, I2V)生成已成为内容创作、影视特效和广告设计等领域的重要工具。相比传统的视频制作流程,I2V模型能够基…

作者头像 李华
网站建设 2026/2/4 2:59:47

如何用Sambert-HifiGan打造智能语音日记应用?

如何用Sambert-HifiGan打造智能语音日记应用? 📌 项目背景与技术选型 在智能语音交互日益普及的今天,个性化、情感化的语音合成(TTS)已成为提升用户体验的关键。传统的TTS系统往往语调单一、缺乏表现力,难以…

作者头像 李华
网站建设 2026/2/5 0:44:17

Sambert-HifiGan语音合成效果调优:从机械到自然的蜕变

Sambert-HifiGan语音合成效果调优:从机械到自然的蜕变 引言:让AI语音“有情绪”地说话 在智能客服、有声阅读、虚拟主播等应用场景中,语音合成(Text-to-Speech, TTS)技术正从“能说”向“说得好、说得像人”演进。传…

作者头像 李华
网站建设 2026/2/8 18:23:55

使用Sambert-HifiGan前后对比:语音质量提升如此明显

使用Sambert-HifiGan前后对比:语音质量提升如此明显 引言:中文多情感语音合成的演进需求 在智能客服、有声阅读、虚拟主播等应用场景中,自然流畅且富有情感的中文语音合成(TTS) 已成为用户体验的核心要素。传统TTS系…

作者头像 李华
网站建设 2026/2/4 4:55:59

Sambert-HifiGan vs Tacotron2:中文语音合成效果全面对比

Sambert-HifiGan vs Tacotron2:中文语音合成效果全面对比 📊 选型背景:为何对比 Sambert-HifiGan 与 Tacotron2? 随着智能客服、有声阅读、虚拟主播等应用场景的爆发式增长,高质量的中文语音合成(TTS&…

作者头像 李华