如果你已经用“free”确认了内存几乎耗尽,但是用top/ps命令看不到用户态应用程序占用了太多内存,那么内核模块可能存在内存泄漏
SLAB是Linux内核中的一个内存分配器,根据对象的大小进行分配。
利用SLAB信息显示内核模块占用的内存空间:
方法一。查看meminfo文件
第二种方法。查看slabinfo文件
一般来说,查看slabinfo文件就足够了。如果发现slabinfo占用的内存很大,可以断定是内核模块存在内存泄漏。
还有一个slabinfo命令其实也可以查看,因为它读取的是/proc。/slabinfo可见
Linux内核的Kmemleak检测到内存泄漏
让我们看看哪里。以下函数会导致内存泄漏吗?
上面的内容可能不太容易一眼看出哪里出了问题。其中kmalloc和kfree是成对出现的。
问题是参数是在pr_debug函数中传递的。熟悉函数调用中传递参数的人应该知道,编译器一般采用栈的方式来处理参数,这是最先进入的,而参数通常是按照相反的顺序执行的(由于函数的实现不同)编译器,这个过程是不确定的),所以kfree会先于kmalloc运行,导致每次运行时都会出现轻微的内存泄漏。
解决Linux内核中的内存泄漏问题
SlabAllocator
ProcInfo
使用CrashDebugger
上一篇:linux内存泄露工具
下一篇:如何定位内存泄漏问题