简介
-
kmemleak
是linux kernel中用于就检测内存泄露
的一种机制。其类似于垃圾收集器,但是与垃圾收集器不同的是,侦测到的孤儿对象不会被free掉,而是通过kmemleak
显示出来。
如何打开
- 打开kernel config
kernel memory leak detector
- 调整
Maximum kmemleak early log entries
的大小,如果不调整这个参数的大小,在启动的过程中可能会出现由于 entries 太小而导致kmemleak一直保持disable的状态,这在mm/kmemleak.c
中可以看到相关的代码,当entries 太小的时候, 会调用kmemleak_disable()来disable掉kmemleak。 - 在boot cmdline中加入参数
kmemleak=on
用来enable kmemleak。
如何使用kmemleak
- 挂载debugfs
- mount -t debugfs nodev /sys/kernel/debug/
- 使用kmemleak
- 扫描发现memory leak:
echo scan > /sys/kernel/debug/kmemleak
- 查看扫描到的leak对象:
cat /sys/kernel/debug/kmemleak
- 清除扫描到的泄露对象:
echo clear > /sys/kernel/debug/kmemleak
网友评论