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文件。