美文网首页
core和vmcore

core和vmcore

作者: 海棠依旧_6c54 | 来源:发表于2019-08-20 21:10 被阅读0次

    什么是core

    Linux 程序接收到某些signal时退出,生成的退出瞬间的内存镜像。
    core 文件可用来进行debugger

    如何配置使系统生成core

       ulimit  -c unlimited
       如果想自定义core的大小将unlimited换成数值,比如1024(M)
    
       kernel.core_pattern = /mnt/core/core-%e-%p-%t.core
       生成core的路径和格式
    
       kernel.core_pipe_limit = 4
       允许同时生成core的进程数
    
       kernel.core_uses_pid = 1
       
    注意:
    如上配置只是临时的,永久生效可以写在/etc/profile & /etc/sysctl.conf & /etc/security/limits.conf中
    注意存储core文件的目录有权限
    
    

    参考https://www.cnblogs.com/xuxm2007/archive/2010/10/22/1858095.html

    生成运行程序的core文件
           gcore –a –o xxx.core  <pid>
    

    centos自带工具

    分析、生成 c/c++ crash 进程的插件,centos 自带
    捕获异常:abrt-hook-ccpp/ abrt-server
    
    
       配置文件 :/etc/abrt/abrt.conf  --- core 保存位置、大小、级别等
                /etc/abrt/plugins/CCpp.conf ----core 保存方式、存储大小等
    分析异常:abrt-action-analyze-ccpp-local---下载debuginfo包,生成coredump backtrace,                        检查bugzilla  
                         abrt-action-generate-backtrace---分析coredump,保存生成backtrace
    参考文档:https://www.mankier.com/package/abrt-addon-ccpp
                https://abrt.readthedocs.io/en/latest/
    
    

    如何分析core

    gdb binary-file xxx.core
        https://blog.csdn.net/Roland_Sun/article/details/42460663
    
    注:
      1) 生成core的二进制文件-g 编译 或 有符号表、maps信息 或 有debug包
        
       http://blog.kankanan.com/article/linux-     4e0b8c038bd5526553bb8c038bd54fe1606f76847a0b5e8f5d296e83.html
      2) 最好在本机或者相同环境上调试
    
    
    确定崩溃原因
    确定堆栈
       bt
    查找出错堆栈对应行号
        nm /addr2line/ (gdb) l * addr/ fun_name 
    确定异常地址所属
             info proc mappings
    

    vmcore

    内核参数配置
    临时配置
    https://www.kernel.org/doc/html/v4.14/admin-guide/kernel-parameters.html
    内核参数配置---永久生效
    grub.cfg & /etc/sysctl.conf
    https://learn-linux.readthedocs.io/zh_CN/latest/administration/kernel/sysctl.html

    kdump 用来捕获内核异常, 并进行转储
    https://www.ibm.com/developerworks/cn/linux/l-cn-kdump1/index.html
    http://linuxperf.com/?p=172
    使用kexec
    加载第二内核, 在异常时进入第二内核
    提供kexec-tools 用户态工具 : kdumpctl /crash
    配置文件 /etc/kdump.conf
    https://linux.die.net/man/5/kdump.conf
    mkdumprd
    创建 initramfs-xxxx-kdump.img. 将/proc/vmcore 复制到制定位置
    https://linux.die.net/man/8/mkdumprd

    分析vmcore

    安装 对应内核debuginfo包
    安装 crash 工具
    常用crash 命令:
    http://man7.org/linux/man-pages/man8/crash.8.html
    分析
    https://blog.csdn.net/guowenyan001/article/details/19807555
    https://people.redhat.com/pladd/NYRHUG_kdump_and_intro_to_vmcore_analysis.pdf
    实例
    http://linuxperf.com/?cat=12

    相关文章

      网友评论

          本文标题:core和vmcore

          本文链接:https://www.haomeiwen.com/subject/wdvmsctx.html