1.简介:
corefile 是Linux下程序崩溃时生成的文件,能够用来分析程序崩溃的缘由,由于它内部包含了程序崩溃时的堆栈信息。shell
2.corefile的设置ubuntu
默认状况下,程序崩溃是不会生成corefile的,由于被操做系统限制。能够经过命令: ulimit -c 来查看,若是值为0则表示被限制了,因此不能生成corefile文件.vim
若是要使用corefile文件分析程序和系统异常信息,能够经过以下命令打开,其中unlimited表示corefile文件的大小无限制.bash
$ ulimit -c unlimited
这种设置方式虽然简单,但它却只是跟shell相关的,也就是说,若是咱们关闭了当前shell再打开一个,则刚才的设置就失效了,这是很不方便的,能够将ulimit -c unlimited 放入/etc/profile中,而后执行source /etc/profile便可当即生效。app
若是想配置只针对某一用户有效,则修改此用户的~/.bashrc或者~/.bash_profile文件:函数
$ ulimit -c unlimited
$ source .bashrc
3.设置Core Dump的核心转储文件目录和命名规则测试
默认corefile是生成在程序的执行目录下或者程序启动调用了chdir以后的目录,咱们能够经过设置生成corefile的格式来控制它,让其生成在固定的目录下。ui
/proc/sys/kernel/core_uses_pid能够控制产生的core文件的文件名中是否添加pid做为扩展,若是添加则文件内容为1,不然为0
/proc/sys/kernel/core_pattern能够设置格式化的core文件保存位置或文件名,好比原来文件内容是core-%espa
# echo "/home/saneri/corefile/core-%e-%p-%t" > /proc/sys/kernel/core_pattern
将会控制所产生的core文件会存放到corefile目录下,产生的文件名为core-命令名-pid-时间戳操作系统
或者
$ sysctl -w kernel.core_pattern=/corefile/core-%e-%p-%t
若是想让每次启动都保存设置,则须要写入配置文件中.
# echo "kernel.core_pattern=/home/saneri/corefile/core-%e-%p-%t" >> /etc/sysctl.conf # sysctl -p /etc/sysctl.conf kernel.core_pattern = /home/saneri/corefile/core-%e-%p-%t
关于格式的的控制有以下几个参数:
%%:至关于% %p:至关于<pid> %u:至关于<uid> %g:至关于<gid> %s:至关于致使dump的信号的数字 %t:至关于dump的时间 %e:至关于执行文件的名称 %h:至关于hostname
4.测试是否能生成core文件
$ kill -s SIGSEGV $$
查看 corefile目录下是否生成了core文件
5.用gdb查看core文件
gdb -c core文件路径 [应用程序的路径]
进去后输入where回车, 就能够显示程序在哪一行当掉的, 在哪一个函数中.
################################################################################
设置方法二:
1.用户家目录下创建corefiles文件夹.
$ mkdir corefiles
2.修改/etc/init.d/apport文件,在do_start 函数中添加 echo "/home/ubuntu/corefiles/core-%e-%p-%t" > /proc/sys/kernel/core_pattern (注意替换为你的 corefiles 目录的路径),注释掉原来的 echo "|$AGENT %p %s %c %d %P" > /proc/sys/kernel/core_pattern;
do_start() { # Return # 0 if daemon has been started # 1 if daemon was already running # 2 if daemon could not be started [ -e /var/crash ] || mkdir -p /var/crash chmod 1777 /var/crash # check for kernel crash dump, convert it to apport report if [ -e /var/crash/vmcore ] || [ -n "`ls /var/crash | egrep ^[0-9]{12}$`" ];then /usr/share/apport/kernel_crashdump || true fi # check for incomplete suspend/resume or hibernate if [ -e /var/lib/pm-utils/status ]; then /usr/share/apport/apportcheckresume || true rm -f /var/lib/pm-utils/status rm -f /var/lib/pm-utils/resume-hang.log fi
echo "/home/ubuntu/corefiles/core-%e-%p-%t" > /proc/sys/kernel/core_pattern #echo "|$AGENT %p %s %c %P" > /proc/sys/kernel/core_pattern echo 2 > /proc/sys/fs/suid_dumpable }
3.添加用户系统变量.在.bashrc文件底部添加以下:
$ vim .bashrc
ulimit -c unlimited
$ source .bashrc
当系统异常时就会在corefiles文件目录下生成core文件。