分类: LINUX
2009-09-14 11:42:15
看一下core dump是否开启
#ulimit -a
core file size (blocks, -c) 0 data seg size (kbytes, -d) unlimited file size (blocks, -f) unlimited max locked memory (kbytes, -l) 4 max memory size (kbytes, -m) unlimited open files (-n) 2048 pipe size (512 bytes, -p) 8 stack size (kbytes, -s) 10240 cpu time (seconds, -t) unlimited max user processes (-u) 7168 virtual memory (kbytes, -v) unlimited 看到core file size是0,说明core dump没开启,使用ulimit -c unlimited来开启core dump,当然unlimited也可以换成具体的文件大小(单位是kb),只是unlimited最省事儿
设置core dump文件名及其位置
/proc/sys/kernel/core_uses_pid 这个文件内容为0的话,所有core dump文件名都是core,没有扩展名;内容为1的话,文件名编程core.pid,即加上进程号作为扩展名。
还可以通过修改/proc/sys/kernel/core_pattern来指定core dump文件位置和文件名,此文件内容改为/tmp/coredumpfile/core-%e-%p-%t,表示所有的core dump都放在/tmp/coredumpfile目录下,文件名为core-命令名-pid-系统时间
详细参数列表
%p - insert pid into filename 添加pid
%u - insert current uid into filename 添加当前uid
%g - insert current gid into filename 添加当前gid
%s - insert signal that caused the coredump into the filename 添加导致产生core的信号
%t - insert UNIX time that the coredump occurred into filename 添加core文件生成时的unix时间
%h - insert hostname where the coredump happened into filename 添加主机名
%e - insert coredumping executable name into filename 添加命令名
查看core dump
gdb --core=core.12345(core dump文件名) 或 gdb exe名 core名
bt 查看程序运行到哪儿,backtrace
file exe名 找exe位置
l 列出代码
where 显示在哪儿down掉
注意:有些情况下,使用了seteuid或setegid,改变了进城了用户和组,比如,无论谁运行mysql,mysql都以mysql用户运行。这种情况下,默认系统不会做core dump,需要把/proc/sys/fs/suid_dumpable内容改成1来要求系统生成core dump |