麒麟os通过启用内核kmemleak机制检测内存泄漏:先确认config_debug_kmemleak=y/m/n,挂载debugfs,执行echo scan > /sys/kernel/debug/kmemleak触发扫描,echo scan=on开启自动扫描,cat查看报告定位泄漏模块。

麒麟OS开启系统级内存泄漏检测,需启用内核内置的kmemleak机制,该功能可扫描内核动态分配但未被引用的内存块,定位驱动或内核模块引发的内存泄漏问题。
确认内核是否支持kmemleak
执行cat /boot/config-$(uname -r) | grep CONFIG_DEBUG_KMEMLEAK,若返回CONFIG_DEBUG_KMEMLEAK=y,说明内核已编译该功能;若为=m,需先加载模块sudo modprobe kmemleak;若为=n,则当前内核不支持,需更换带调试选项的内核版本。
【必须确保debugfs已挂载,否则kmemleak无法输出结果】
挂载debugfs并启用kmemleak
运行sudo mount -t debugfs nodev /sys/kernel/debug/挂载调试文件系统。
向kmemleak控制接口写入启动指令:echo scan > /sys/kernel/debug/kmemleak,触发一次即时扫描。
执行echo scan=on > /sys/kernel/debug/kmemleak,开启后台自动扫描线程(默认每600秒运行一次)。
查看与清理泄漏报告
直接读取报告:sudo cat /sys/kernel/debug/kmemleak。输出中每条记录包含内存地址、分配大小、调用栈回溯,关键线索在alloc行末尾的函数名和源码行号。
如需清空当前所有已报告项,运行echo clear > /sys/kernel/debug/kmemleak。注意:此操作仅标记为“灰”,不会释放内存,也不会影响正在运行的扫描。
若发现报告中大量对象指向同一模块(如audit.ko或mate-indicators.ko),基本可锁定泄漏源头为对应内核驱动或模块。











