slab debug定位kernelspace内存泄露的方法

内存泄露问题,平时碰到的也不少,而且很难定位。下面介绍一下辅助定位内存泄漏的手段,主要是针对内存kmalloc。

1.我们先要在kernel中把如下两个config打开。

2、查看meminfo,如下图,若是SUnreclaim在一直增加即可初步判断为内核中kmalloc之后没有释放,导致内存泄漏。

3、刚开机启动时cat /proc/slabinfo备份一下,再到出现泄露之后cat /proc/slabinfo跟刚启机时的slabinfo做对比。slabinfo部分截图如下。

4、比如图中kmalloc-8192的次数增加较多,则可去/sys/kernel/slab/kmalloc-8192/alloc_calls中查看调用kmalloc-8192的symbol和他调用的次数,定位到出现泄露的function。