coredump监测篇

1)coredump作用  
    coredump主要用于监测Linux系统中进程因为一些非法操作导致挂死,记录此时进程挂死的堆栈信息,各种函数接口调用关系,运行时的内存,内存管理信息,寄存器状态,将当前程序工作状态储存到一个core文件中,最后通过调试分析工具进行分析进程挂死原因(如gdb --core=corefile)
2)coredump文件存储位置
    core文件默认存储在与可执行程序在同一级目录,文件名:core,通过cat  /proc/sys/kernel/core_pattern 获取缺省保存文件名
    可以通过手动修改存储位置以及存储名字,时使其可以同时监测多个进程挂死状态不被覆盖
    /*通过以下方式配置可以使进程崩溃时生成指定core文件目录以及文件名字 */
     echo “/data/coredump/core.%e.%p” >/proc/sys/kernel/core_pattern  
  %e:表示进程名字;%p:表示记录进程号
    注:cat  /proc/sys/kernel/core_uses_pid  = 1时,默认记录了进程号,使用%p与否都会生成进程号
    readelf <file>可以查看文件类型
3)系统环境中如何让coredump从启动时就开启对进程的监控
    a) 产生coredump的条件,首先需要确认当前会话的ulimit –c,若为0,则不会产生对应的coredump,需要进行修改和设置。
        ulimit  -c unlimited  (可以产生coredump且不受大小限制,只要系统缓存大小能承受就能存储)
        ulimit -c [size]  (设置大小,以块为单位1 blocks = 512bit)
        Linux系统加载应用程序第一个执行脚本处添加以下监测脚本则系统开启coredump监测功能
        vi  /etc/init.d/rcS
        ulimit -c unlimited
        echo “/data/coredump/core.%e.%p” >/proc/sys/kernel/core_pattern  
4)系统无法生成core文件可能有哪些原因
    如果出现以下情况,则不会生成核心文件
    (a) 进程是 set-user-ID 并且当前用户不是程序文件的所有者,或者
    (b) 进程是 set-group-ID 并且当前用户不是文件的组所有者,
    (c) 用户在当前工作目录没有写权限,
    (d) 文件已存在且用户无权写入,或
    (e) 文件太大, 核心文件的权限(假设该文件不存在)通常是用户读取和用户写入,尽管 Mac OS X        只设置了用户读取。
5)系统产生core文件有哪些可能情况
    a) 内存访问越界
       <1> 由于使用错误的下标,导致数组访问越界。
      <2>搜索字符串时,依靠字符串结束符来判断字符串是否结束,但是字符串没有正常的使用结束符。
      <3>使用strcpy, strcat, sprintf, strcmp,strcasecmp等字符串操作函数,将目标字符串读/写爆。应该使用strncpy, strlcpy, strncat, strlcat, snprintf, strncmp, strncasecmp等函数防止读写越界
    b) 多线程程序使用了线程不安全的函数
     c)多线程读写的数据未加锁保护 ;多线程公共数据访问及时加锁
    d)  非法指针
        <1>野指针
        <2>随意进行指针转换
    e)堆栈移除,在代码编写时避免在栈空间定义太大局部变量,防止栈溢出;动态开启空间及时释放避免对空间泄露
6)使用追踪工具进行coredump定位
     gdb调试工具:(常用调试命令如调试工具篇)
    gdb  <core_file> 
7)coredump参数格式
可以在core_pattern模板中使用变量还很多,见下面的列表:
    %% 单个%字符
    %p 所dump进程的进程ID
    %u 所dump进程的实际用户ID
    %g 所dump进程的实际组ID
    %s 导致本次core dump的信号
    %t core dump的时间 (由1970年1月1日计起的秒数)
    %h 主机名
    %e 程序文件名
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值