本文以centos7的3.10.0-1160内核为例。
一、环境准备
1.1安装kexec-tools
yum install kexec-tools
1.2设置crashkernel预留内存大小

注:crashkernel的大小,直接影响是否能够存储生成的crash文件
修改后,执行grub2-mkconfig -o /boot/grub2/grub.cfg配置到内核,reboot生效。
1.3修改kdump默认配置/etc/kdump.conf
vi /etc/kdump.conf
主要修改:path /var/crash(制定生成路径)
core_collector makedumpfile -c -l --message-level 1 -d 31(增加-c参数,代表压缩coredump文件)
default reboot(生成coredump后,重启系统)
1.4开启kdump服务
systemctl start kdump.service //启动kdump
systemctl enable kdump.service //设置开机启动
1.5测试kdump功能(检查kdump是否开启成功)
systemctl is-active kdump.service(结果为active)
service kdump status(结果为active)
1.6触发crash
echo 1 > /proc/sys/kernel/sysrq
echo c > /proc/sysrq-trigger
1.7重启后查看crash
ls /var/crash/
二、crash分析准备
crash分析Vmore,需要:1.crash工具
2.内核崩溃生成的Vmore
3.带调试信息的vmlinux
2.1安装crash
yum install crash
2.2下载vmlinux
若当前环境内核为镜像中自带内核,使用2.2.1方法下载vmlinux
若当前环境内核为自己源码编译的,使用2.2.2方法编译vmlinux
2.2.1使用官网内核debug版本分析
2.2.1.1官网下载安装包
http://debuginfo.centos.org/7/x86_64/kernel-debuginfo-common-x86_64-`uname -r`.rpm
http://debuginfo.centos.org/7/x86_64/kernel-debuginfo-`uname -r`.rpm
2.2.1.2安装
rpm -ivh kernel-debuginfo-*.rpm
2.2.1.3查看vmlinux
在/lib/debug/lib/目录下
2.2.2使用自己源码编译的内核分析
内核源码编译方法见:3.10.0-1160内核源码编译
注意:在编译内核时,需要打开以下编译配置项
- kexec system call :CONFIG_KEXEC=y
- sysfs file system support : CONFIG_SYSFS=y
- Compile the kernel with debug info : CONFIG_DEBUG_INFO=Y
- kernel crash dumps : CONFIG_CRASH_DUMP=y
- /proc/vmcore support : CONFIG_PROC_VMCORE=y
usr/src/linux-3.10.0-1160.el7/vmlinux为自己源码编译出来的vmlinux
三、crash分析
以我自己编译的vmlinux为例
crash /usr/src/linux-3.10.0-1160.el7/vmlinux /var/crash/127.0.0.1-2022-05-19-21\:13\:13/vmcore

进入crash,开始分析:

crash有哪些命令,可参考以下链接
https://blog.youkuaiyun.com/weixin_42915431/article/details/105666507
参考连接:https://www.cnblogs.com/augusite/p/10613794.html
https://shaocheng.li/posts/2018/07/05/#5-crash-%E5%91%BD%E4%BB%A4
https://blog.youkuaiyun.com/ayang1986/article/details/121522938
661

被折叠的 条评论
为什么被折叠?



