制造内核崩溃并使用crash分析内核崩溃产生的vmcore文件
1,安装kernel-debuginfo$(uname -r).rpm和kernel-debuginfo-common-$(uname -r).rpm
2,开启内核崩溃转储
service kdump start
3,开启Magic System Request Key功能
echo 1 >/proc/sys/kernel/sysrq
4,永久开启Magci System Request Key功能
编辑/etc/sysctl.conf文件使kernel.sysrq的值为1,1表示开启 0表示关闭
vim /etc/sysctl.conf
kernel.sysrq = 1
5,制造系统崩溃
echo c >/proc/sysrq-trigger
6,等待系统重启后重新登录进入分析崩溃产生的vmcore文件
service kdump start
3,开启Magic System Request Key功能
echo 1 >/proc/sys/kernel/sysrq
4,永久开启Magci System Request Key功能
编辑/etc/sysctl.conf文件使kernel.sysrq的值为1,1表示开启 0表示关闭
vim /etc/sysctl.conf
kernel.sysrq = 1
5,制造系统崩溃
echo c >/proc/sysrq-trigger
6,等待系统重启后重新登录进入分析崩溃产生的vmcore文件
6.1 使用crash分析vmcore文件
crash /usr/lib/debug/lib/module/2.6.32-431.el6.x86_64/vmlinux /var/crash/127.0.0.1-2017-04-05-15\:12\:12/vmcore
6.2 查看崩溃前的系统调用
crash> bt
从上图我们看到了一个异常[exception RIP: sysrq_handle_crash+22]。下面进一步对这个调用的函数进行分析
6.3 反汇编该段函数
crash> dis -l sysrq_handle_crash+22
如图可以看到出现异常的地方是在/usr/src/debug/kernel-2.6.32-431.el6/linux-2.6.32-431.el6.x86_64/drivers/char/sysrq.c:文件的130行的地方,接下来我们查看一下该文件的130行写着什么
6.4 分析异常函数所对应的文件源码
从上图可以看出该函数是强制崩溃,代码也给出了注释:/* force panic */ ,把这段代码copy出来用gdb进行调试会发现报SIGSEGV的错,如下图
program received signal SIGSEGV,Segmentation fault. 经过查阅资料得知SIGSEGV信号是无效的的内存访问。就这样问题被一步一步的找出了,此处是人为调用了系统的强制崩溃,只是为了帮助理解分析系统崩溃的思路和过程。