linux内存泄露命令 linux内存泄漏检测工具( 二 )


Linux Kernel模块内存泄露分析 假如通过“Free”查看内存几乎耗尽,但通过 top/ps 命令却看不出来用户态应用程序占用太多的内存空间,那么内核模块可能发生了内存泄露
SLAB是Linux内核中按照对象大小进行分配的内存分配器 。
通过SLAB的信息来查看内核模块占用的内存空间:
方法1.查看meminfo文件
方法2.查看slabinfo文件
一般查看slabinfo文件就足以 , 如果发现slabinfo中占用内存过大 , 那基本可以断定,内核模块出现了内存泄露了
还有个命令slabinfo也是可以看,其实也是去读 /proc/slabinfo后可视化出来
Linux内核的Kmemleak实现内存泄露检测
看看下面这个函数是哪里导致的内存泄漏呢?
一眼可能不容易看出上面的有什么问题,有kmalloc , 有kfree 成对出现的 。
问题正好出在 pr_debug 这个函数中的参数传递, 熟悉函数调用传参的人应该会知道编译器一般对参数的处理采用堆栈的方式,是一个先进后出的过程,这样参数的执行一般是逆序的(由于编译器实现的不同,这个过程不是确定的),这样kfree会在kmalloc之前运行 , 导致每次运行都会泄漏一点内存 。
Resolving Memory Leaks In Linux Kernel
Slab Allocator
Proc Info
Using Crash Debugger
linux内存泄露命令的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于linux内存泄漏检测工具、linux内存泄露命令的信息别忘了在本站进行查找喔 。

推荐阅读