进程异常退出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)函数堆栈列表也是进程空间内的数据,如果指针越界的话,可能会将该数据区的数据搞乱了;