CoreDump設(shè)置方式

本文講述利用coredump調(diào)試時,對coredump信息相關(guān)的設(shè)置方式。

設(shè)置core文件大小

  • 列出所有資源的限制

    #ulimit -a
    1240
    
  • 查看core file size

    #ulimit -c
    

    這里對于 core file size:

    unlimited:core文件的大小不受限制
    0:程序出錯時不會產(chǎn)生core文件
    1024:代表1024k,core文件超出該大小就不能生成了
    
  • 設(shè)置core文件大小

    #ulimit -c fileSize
    

    注意:盡量將這個文件大小設(shè)置得大一些,程序崩潰時生成Core文件大小即為程序運行時占用的內(nèi)存大小。可能發(fā)生堆棧溢出的時候,占用更大的內(nèi)存

查看CoreDump文件路徑配置

  • 方法1:

    #cat /proc/sys/kernel/core_pattern
    
  • 方法2:

    #/sbin/sysctl kernel.core_pattern
    

修改core dump文件路徑

  • 方法1-臨時修改

    修改 /proc/sys/kernel/core_pattern 文件,但/proc目錄本身是動態(tài)加載的,每次系統(tǒng)重啟都會重新加載,因此這種方法只能作為臨時修改。

    例如:

    #echo ‘/var/log/%e.core.%p’ > /proc/sys/kernel/core_pattern
    
  • 方法2:永久修改

    使用 sysctl -w name=value 命令。

    例如:

    #sysctl -w kernel.core_pattern=/var/log/%e.core.%p
    

另外,為了更詳盡的記錄core dump當(dāng)時的系統(tǒng)狀態(tài),可通過以下參數(shù)來豐富core文件的命名:

%% 單個%字符
%p 所dump進程的進程ID
%u 所dump進程的實際用戶ID
%g 所dump進程的實際組ID
%s 導(dǎo)致本次core dump的信號
%t core dump的時間 (由1970年1月1日計起的秒數(shù))
%h 主機名
%e 程序文件名

測試是否能生成core文件

首先,向目標(biāo)進程發(fā)送信號產(chǎn)生coredump

#kill -s SIGSEGV $$

這里,使用當(dāng)前進程的進程號,即 $$ 。

其次,根據(jù)前面配置的文件路徑,查看對應(yīng)目錄下是否生成了coredump文件

參考

  • https://www.cnblogs.com/xiaodoujiaohome/p/6222895.html

  • http://www.itdecent.cn/p/dc7e7bd7d1a2

  • linux下生成core dump文件方法及設(shè)置

    登陸 LINUX 服務(wù)器,任意位置鍵入
    echo "ulimit -c 1024" >> /etc/profile
    退出 LINUX 重新登陸 LINUX
    鍵入 ulimit -c
    如果顯示 1024 那么說明 coredump 已經(jīng)被開啟。
    1024 限制產(chǎn)生的 core 文件的大小不能超過 1024kb,可以使用參數(shù)unlimited,取消該限制
    ulimit -c unlimited
    
    
     . 設(shè)置 Core Dump 的核心轉(zhuǎn)儲文件目錄和命名規(guī)則
     /proc/sys/kernel/core_uses_pid 可以控制產(chǎn)生的 core 文件的文件名中是否添加 pid 作為擴展 ,如果添加則文件內(nèi)容為 1 ,否則為 0
     proc/sys/kernel/core_pattern 可以設(shè)置格式化的 core 文件保存位置或文件名 ,比如原來文件內(nèi)容是 core-%e
     可以這樣修改 :
     echo "/corefile/core-%e-%p-%t" > core_pattern
     將會控制所產(chǎn)生的 core 文件會存放到 /corefile 目錄下,產(chǎn)生的文件名為 core- 命令名 -pid- 時間戳
    
    
    ulimit -c unlimited
    echo "/tmp/core-%e-%p" > /proc/sys/kernel/core_pattern
    gcc -o main -g a.c
    gdb main /tmp/core-main-10815
    
  • https://blog.csdn.net/u011417820/article/details/71435031

    1.設(shè)置core文件大小
    列出所有資源的限制: ulimit -a
    1240
    ulimit -a.png
    或者查看core file size: ulimit -c
    
    core file size:
    unlimited:core文件的大小不受限制
    0:程序出錯時不會產(chǎn)生core文件
    1024:代表1024k,core文件超出該大小就不能生成了
    設(shè)置core文件大?。?ulimit -c fileSize
    
    注意:
    盡量將這個文件大小設(shè)置得大一些,程序崩潰時生成Core文件大小即為程序運行時占用的內(nèi)存大小??赡馨l(fā)生堆棧溢出的時候,占用更大的內(nèi)存
    
    
    2.設(shè)置core文件的名稱和文件路徑
    默認(rèn)生成路徑:輸入可執(zhí)行文件運行命令的同一路徑下
    默認(rèn)生成名字:默認(rèn)命名為core。新的core文件會覆蓋舊的core文件
    a.設(shè)置pid作為文件擴展名
    
    1:添加pid作為擴展名,生成的core文件名稱為core.pid
    0:不添加pid作為擴展名,生成的core文件名稱為core
    修改 /proc/sys/kernel/core_uses_pid 文件內(nèi)容為: 1
    修改文件命令: echo "1" > /proc/sys/kernel/core_uses_pid
    或者
    sysctl -w kernel.core_uses_pid=1 kernel.core_uses_pid = 1
    b. 控制core文件保存位置和文件名格式
    
    修改文件命令: echo "/corefile/core-%e-%p-%t" > /proc/sys/kernel/core_pattern
    或者:
    sysctl -w kernel.core_pattern=/corefile/core-%e-%p-%t kernel.core_pattern = /corefile/core-%e-%p-%t
    可以將core文件統(tǒng)一生成到/corefile目錄下,產(chǎn)生的文件名為core-命令名-pid-時間戳
    以下是參數(shù)列表:
    %p - insert pid into filename 添加pid(進程id)
    %u - insert current uid into filename 添加當(dāng)前uid(用戶id)
    %g - insert current gid into filename 添加當(dāng)前gid(用戶組id)
    %s - insert signal that caused the coredump into the filename 添加導(dǎo)致產(chǎn)生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 添加導(dǎo)致產(chǎn)生core的命令名
    
    3.測試是否能生成core文件
    kill -s SIGSEGV $$
    查看/corefile目錄下是否生成了core文件
    
  • https://blog.csdn.net/yasi_xi/article/details/16118349

    最近遇到一個問題,SUSE Linux系統(tǒng)中的某個應(yīng)用程序異常而最終引發(fā)了系統(tǒng)core dump,但遺憾的時在系統(tǒng)重啟后并沒有找到core文件,影響了我們對問題的分析定位。
    
    經(jīng)過分析發(fā)現(xiàn)系統(tǒng)默認(rèn)的core文件生成路徑是/var/logs,但/var/logs目錄并非系統(tǒng)自帶的,系統(tǒng)初始安裝默認(rèn)自帶的是/var/log,最終導(dǎo)致該系統(tǒng)出現(xiàn)core dump后并沒能生成core文件,因此如何查詢和修改系統(tǒng)默認(rèn)的core dump文件生產(chǎn)路徑呢?方法如下:
    
    一. 查詢core dump文件路徑:
    方法1:
    # cat /proc/sys/kernel/core_pattern
    
    方法2:
    # /sbin/sysctl kernel.core_pattern
    
    二. 修改core dump文件路徑:
    方法1:臨時修改:修改/proc/sys/kernel/core_pattern文件,但/proc目錄本身是動態(tài)加載的,每次系統(tǒng)重啟都會重新加載,因此這種方法只能作為臨時修改。
    /proc/sys/kernel/core_pattern
    例:echo ‘/var/log/%e.core.%p’ > /proc/sys/kernel/core_pattern
    
    方法2:永久修改:使用sysctl -w name=value命令。
    例:/sbin/sysctl -w kernel.core_pattern=/var/log/%e.core.%p
    
    為了更詳盡的記錄core dump當(dāng)時的系統(tǒng)狀態(tài),可通過以下參數(shù)來豐富core文件的命名:
    %% 單個%字符
    %p 所dump進程的進程ID
    %u 所dump進程的實際用戶ID
    %g 所dump進程的實際組ID
    %s 導(dǎo)致本次core dump的信號
    %t core dump的時間 (由1970年1月1日計起的秒數(shù))
    %h 主機名
    %e 程序文件名
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 在Linux下程序不尋常退出時,內(nèi)核會在當(dāng)前工作目錄下生成一個core文件(是一個內(nèi)存映像,同時加上調(diào)試信息)。使...
    隨風(fēng)化作雨閱讀 47,942評論 2 15
  • 一、core 文件的生成 C程序因為segment fault(段錯誤)崩潰時,如果系統(tǒng)core dump功能是打...
    zhuweipu閱讀 2,518評論 0 2
  • core dump:(內(nèi)存快照)在linux中當(dāng)程序發(fā)生異常中止或者崩潰時,操作系統(tǒng)會將程序當(dāng)時的內(nèi)存狀況記錄下來...
    zs0zrc閱讀 1,621評論 0 1
  • 工具:GDB 分析 導(dǎo)致進程異常退出的這兩類情況: 第一類:向進程發(fā)送信號導(dǎo)致進程異常退出; 第二類:代碼錯誤導(dǎo)致...
    董春磊閱讀 2,017評論 0 1
  • 什么是coredump Coredump叫做核心轉(zhuǎn)儲,它是進程運行時在突然崩潰的那一刻的一個內(nèi)存快照。操作系統(tǒng)在程...
    java菜閱讀 4,325評論 0 4

友情鏈接更多精彩內(nèi)容