进程异常退出core文件

如果在生产环境下已经是chdir("/")的情况下,如何产生core文件

a)首先确定ulimit 的设置
      ulimit -a          -->查看当前的ulimit限制;
      ulimit -c 1024000  -->设置core file size大小,缺省为0即不让生成core文件
    b)针对不同的操作系统,core文件生成的文件名及位置是可设置的;
    -----------
    Linux
    -----------  
    修改:/proc/sys/kernel/core_pattern
    例如:
      echo "/tmp/core-%e-%p" >/proc/sys/kernel/core_pattern
      其中 %e:进程名, %p:进程号, 也可增加其它,具体参考 man core

    -----------
    AIX
    -----------  
    通过 chcore 命令修改
    例如:
      lscore                 -->查看当前core规则
      chcore -p on        -->与-l配套使用
      chcore -n on        -->core文件中上加进程号及时间
      chcore -l "/tmp"    -->指定生成的/tmp下去

    ==>以上设置后,就算chdir("/"), 在异常退出的情况下也会生成core文件;
    core文件分析方式:
    linux: gdb <bin> <core>
    aix:   file core* dbx <bin> <core>
    >where                  -->最常用的命令,core在哪了?显示当时的函数堆栈列表


    注:
       where 有时会查不到故障定位,报错,why?
       可能的原因:
       1)生成的core文件很大,如20M,ulimit -c 限制为10M,这样的话,core文件被截短了,有些内容看不到了;
       2)函数堆栈列表也是进程空间内的数据,如果指针越界的话,可能会将该数据区的数据搞乱了;

posted @ 2012-09-24 09:08  Further  阅读(1459)  评论(0编辑  收藏  举报