0
点赞
收藏
分享

微信扫一扫

内存泄漏扫描工具Kmemleak

cnlinkchina 03-10 20:15 阅读 1

1,下载编译安装内核

要启用Kmemleak,需要在内核模块中加载Kmemleak模块,这样就需要重新编译内核

#因为我们在国内的原因,从GitHub上拉取代码需要先设置host
vi /etc/hosts
#获取Linux内核,访问https://kernel.org/
wget -o https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.4.241.tar.xz linux-5.4.241.tar.xz
tar -xf linux-5.4.241.tar.xz
#安装内核相关编译软件
yum install kernel-debuginfo kernel-debug info-common
yum groupinstall "Development Tools"
yum install elfutils-libelf-devel
yum install -y ncurses-devel
yum install centos-release-scl
#CentOS 7.6默认的gcc版本是4.8,过低,升级到8版本
yum install devtoolset-8-gcc*
scl enable devtoolset-8 bash
#升级gcc版本后将其永久生效
mv /usr/bin/gcc /usr/bin/gcc-4.8.5
ln -s /opt/rh/devtoolset-8/root/bin/gcc /usr/bin/gcc
mv /usr/bin/g++ /usr/bin/g++-4.8.5
ln -s /opt/rh/devtoolset-8/root/bin/g++ /usr/bin/g++
gcc --version
g++ --version
#开始编译
cd linux-5.4.241
#设置编译选项并编译(这一步需要时间长,而且编译出的文件夹大小大概16G左右,要注意空间是否足够)
make -j$(nproc) CONFIG_HAVE_DEBUG_KMEMLEAK=y CONFIG_DEBUG_KMEMLEAK=y CONFIG_DEBUG_KMEMLEAK_EARLY_LOG_SIZE=1600 CONFIG_DEBUG_KMEMLEAK_TEST=m
#安装内核:编译完成后,需要将内核安装到系统中。可以使用以下命令安装内核
make modules_install install
make install
#查看可用内核版本及启动顺序
awk -F\' '$1=="menuentry " {print i++ " : " $2}' /boot/grub2/grub.cfg
#安装辅助工具(非必须,有些系统自带该工具):grub2-pc
yum install -y grub2-pc
#设置内核默认启动顺序
grub2-set-default 0
#编辑/etc/default/grub文件
vi /etc/default/grub 
设置   GRUB_DEFAULT=0   # 只需要修改这里即可
# 运行grub2-mkconfig命令来重新创建内核配置
grub2-mkconfig -o /boot/grub2/grub.cfg
#重启系统
reboot
#重启完成后,查看内核版本是否正确
uname -r
#重启
reboot

image.png

2,kmemleak的使用

#挂载debugfs文件系统
mount -t debugfs nodev /sys/kernel/debug/
#清除内核扫描记录
echo clear > /sys/kernel/debug/kmemleak
#制造内核泄漏
modprobe kmemleak-test
#手动开启扫描
echo scan > /sys/kernel/debug/kmemleak
#查看扫描结果
cat /sys/kernel/debug/kmemleak

image.png

举报

相关推荐

0 条评论