• Centos7/RHEL7 开启kdump


    2018年6月20日 

    原文链接《How to enable Kdump on RHEL 7 and CentOS 7》

    Kdump是一种基于kexec的Linux内核崩溃捕获机制,简单来说系统启动时会预留一块内存,当系统崩溃调用命令kexec(kdump kernel)在预留的内存中启动kdump内核,
    该内核会将此时内存中的所有运行状态和数据信息收集到一个coredump文件中以便后续分析调试。

    本文介绍如何在Centos7/RHEL7 开启kdump。

    步骤1 安装kexec-tools

    [objc] view plain copy
     
    1. [vagrant@localhost ~]$ yum install kexec-tools  

    步骤2 设置crashkernel预留内存大小

    [objc] view plain copy
     
    1. [vagrant@localhost ~]$ cat /etc/default/grub   
    2. GRUB_TIMEOUT=5  
    3. GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"  
    4. GRUB_DEFAULT=saved  
    5. GRUB_DISABLE_SUBMENU=true  
    6. GRUB_TERMINAL_OUTPUT="console"  
    7. GRUB_CMDLINE_LINUX="<span style="color:#ff0000;">crashkernel=256M</span> rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet"  
    8. GRUB_DISABLE_RECOVERY="true"  
    修改crashkernel的大小,我的系统内存是1G,保留了256M,注意预留内存大小,过小会导致生成coredump文件失败(不知道设置多少时,可以尝试每次增加128M)
    修改后还需重新生成grub配置文件,重启系统才能生效
    [objc] view plain copy
     
    1. [vagrant@localhost ~]$ grub2-mkconfig -o /boot/grub2/grub.cfg  
    2. [vagrant@localhost ~]$ reboot  
    步骤3 修改kdump默认配置/etc/kdump.conf
    centos7 默认已安装kdump,根据需要修改默认配置
    [objc] view plain copy
     
    1. [vagrant@localhost ~]$ vi /etc/kdump.conf   
    2. #指定coredump文件存储位置  
    3. path /var/crash  
    4. #增加-c参数,代表压缩coredump文件  
    5. core_collector makedumpfile -c -l --message-level 1 -d 31  
    6. #生成coredump后,重启系统,  
    7. default reboot  
    步骤4 开启kdump服务
    [objc] view plain copy
     
    1. [vagrant@localhost ~]$ systemctl start kdump.service //启动kdump  
    2. [vagrant@localhost ~]$ systemctl enable kdump.service  //设置开机启动  
    步骤5 测试kdump功能
    检查kdump是否开启成功
    [objc] view plain copy
     
    1. [vagrant@localhost ~]$ service kdump status  
    2. Redirecting to /bin/systemctl status kdump.service  
    3. ● kdump.service - Crash recovery kernel arming  
    4.    Loaded: loaded (/usr/lib/systemd/system/kdump.service; enabled; vendor preset: enabled)  
    5.    Active: active (exited) since Mon 2017-12-18 09:12:56 UTC; 43min ago  
    6.   Process: 913 ExecStart=/usr/bin/kdumpctl start (code=exited, status=0/SUCCESS)  
    7.  Main PID: 913 (code=exited, status=0/SUCCESS)  
    8.    CGroup: /system.slice/kdump.service  
    9. [vagrant@localhost ~]$ systemctl is-active kdump.service  
    10. active  
    手动触发crush
    [objc] view plain copy
     
    1. [root@cloud ~]# echo 1 > /proc/sys/kernel/sysrq ; echo c > /proc/sysrq-trigger  
    如果没有问题,系统会自动重启,重启后可以看到在/var/crash/目录下生成了coredump文件
    [objc] view plain copy
     
    1. [vagrant@localhost ~]$ ls /var/crash/  
    2. 127.0.0.1-2017-12-18-08:25:11  
    步骤6 安装crash,分析coredump文件
    [objc] view plain copy
     
    1. [vagrant@localhost ~]$ yum install crash  
    [objc] view plain copy
     
    1. [vagrant@localhost ~]$ crash /var/crash/127.0.0.1-2017-12-18-08:25:11/vmcore /usr/src/kernels/linux-`uname -r`/vmlinux  
    输入问号”?“,查看crash支持的命令
    [objc] view plain copy
     
    1. crash> ?  
    2.   
    3. *              files          mach           repeat         timer            
    4. alias          foreach        mod            runq           tree             
    5. ascii          fuser          mount          search         union            
    6. bt             gdb            net            set            vm               
    7. btop           help           p              sig            vtop             
    8. dev            ipcs           ps             struct         waitq            
    9. dis            irq            pte            swap           whatis           
    10. eval           kmem           ptob           sym            wr               
    11. exit           list           ptov           sys            q                
    12. extend         log            rd             task   
    比如log命令,可以看到系统crash时的打印信息
    [objc] view plain copy
     
    1. [  470.018926] CPU: 0 PID: 1490 Comm: iwconfig Tainted: GF          O 3.10.69 #1  
    2. [  470.019251] Hardware name: innotek GmbH VirtualBox/VirtualBox, BIOS VirtualBox 12/01/2006  
    3. [  470.019603] task: ffff880039406ae0 ti: ffff880035d1c000 task.ti: ffff880035d1c000  
    4. [  470.019931] RIP: 0010:[<ffffffff8129d3cd>]  [<ffffffff8129d3cd>] memcpy+0xd/0x110  
    5. [  470.020419] RSP: 0018:ffff880035d1dc3 EFLAGS: 00010206  
    6. [  470.020697] RAX: ffff88003dba3508 RBX: ffff8800362eb400 RCX: 1ffffffffffffffc  
    7. [  470.021218] RDX: 0000000000000006 RSI: 000000000000001a RDI: ffff88003dba3508  
    8. [  470.021735] RBP: ffff880035d1dc88 R08: 0000000000016320 R09: ffff88003dba34c0  
    9. [  470.022917] R10: 0000000000000000 R11: ffff880035d1d9c6 R12: ffff8800341a3280  
    10. [  470.023437] R13: ffffc90000226104 R14: ffffffffffffffe2 R15: ffff88003dba34c0  
    11. [  470.023958] FS:  00007ff662ec1740(0000) GS:ffff88003fc00000(0000) knlGS:0000000000000000  
    12. [  470.024725] CS:  0010 DS: 0000 ES: 0000 CR0: 000000008005003b  
    13. [  470.025223] CR2: 000000000000001a CR3: 0000000038f6a000 CR4: 00000000000406f0  
    14. [  470.025775] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000  
    15. [  470.026334] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400  
  • 相关阅读:
    程序员如何跨过自我推销的难关?
    常用接口分类与模块设计的方法
    如何设计分层架构和交互接口 API ?
    如何建立架构师的立体化思维?
    从程序员到架构师的技能图谱
    selenium鼠标、键盘操作常用API
    selenium元素定位之-css定位
    python每日一练之集合set
    selenium2简单的定位方法和Xpath定位
    python之元组
  • 原文地址:https://www.cnblogs.com/jjmcao/p/9204220.html
Copyright © 2020-2023  润新知