内核内存检测工具memleak的使用方式

Kmemleak 提供了一种可选的内核泄漏检测,其方法类似于跟踪内存收集器

使用Kmemleak需要在内核中将CONFIG_DEBUG_KMEMLEAK使能(默认未使能,因此使用该功能会涉及替换内核)。

 

1.  将内核默认.config文件拷贝到源码目录下。

cd linux-3.10.0-327.el7

cp /boot/config-3.10.0-327.el7.x86_64 .config .

2.     make menuconfig

执行make menuconfig,然后配置项如下:

Kernel hacking   -à

        [*] Kernel memory leak detector

(4000) Maximum kmemleak early log entries 

       如图:


然后save,并退出。

3.     执行如下命令编译内核

make –j24

makemodules_install

make install

4.     设置内核启动选项

(1)grub2-editenv list //查看当前内核


(2) cat /boot/grub2/gurb.conf | grep menuentry 查看所有内核


(3)grub2-set-default'CentOS Linux (3.10.0) 7 (Core)'  设置新编译内核为默认启动。

5. reboot 使新内核生效

重启之后,执行dmesg |grep memleak能查看如如下信息,说明设置成功。

6. kmemleak的使用

(1)挂载debugfs文件系统

mount -t debugfs nodev /sys/kernel/debug/

(2)开启内核自动检测线程

       echo scan > /sys/kernel/debug/kmemleak

         通过dmesg |grep memleak可以看到检测的情况。

(3)查看打印信息

       cat /sys/kernel/debug/kmemleak

(4)清除内核检测报告,新的内存泄露报告将重新写入/sys/kernel/debug/kmemleak

   echo clear > /sys/kernel/debug/kmemleak


内存扫描参数可以进行修改通过向/sys/kernel/debug/kmemleak 文件写入。 参数使用如下:

  off禁用kmemleak(不可逆)

  stack=on启用任务堆栈扫描(default)

  stack=off禁用任务堆栈扫描

  scan=on启动自动记忆扫描线程(default)

  scan=off停止自动记忆扫描线程

  scan=<secs>设置n秒内自动记忆扫描,默认600s

  scan开启内核扫描

  clear清除内存泄露报告

  dump=<addr>转存信息对象在<addr>

 

猜你喜欢

转载自blog.csdn.net/axw2013/article/details/79603205