• 制造内核崩溃并使用crash分析内核崩溃产生的vmcore文件


    制造内核崩溃并使用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文件
    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信号是无效的的内存访问。就这样问题被一步一步的找出了,此处是人为调用了系统的强制崩溃,只是为了帮助理解分析系统崩溃的思路和过程。
  • 相关阅读:
    Security 前端页面配置
    使用HttpSession获取用户信息
    开启使用Tonken记住我功能
    基于注解的方式发送和订阅消费消息
    通过Security提供的SecurityContextHolder获取登录用户信息
    RabbitMQ 基于API的方式发送和消费消息
    TypeScript declare Object Array Interface methods All In One
    js get Set the first item All In One
    macOS run VSCode from terminal All In One
    在线 Java 语言编程 All In One
  • 原文地址:https://www.cnblogs.com/sonwnja/p/6802844.html
Copyright © 2020-2023  润新知