CoreDump設置方式 設置core文件大小 查看CoreDump文件路徑配置 修改core dump文件路徑 測試是否能生成core文件 參考

本文講述利用coredump調試時,對coredump信息相關的設置方式。

設置core文件大小

  • 列出所有資源的限制

    #ulimit -a
    1240
    
  • 查看core file size

    #ulimit -c
    

    這裏對於 core file size:

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

    #ulimit -c fileSize
    

    注意:儘量將這個文件大小設置得大一些,程序崩潰時生成Core文件大小即爲程序運行時佔用的內存大小。可能發生堆棧溢出的時候,佔用更大的內存

查看CoreDump文件路徑配置

  • 方法1:

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

    #/sbin/sysctl kernel.core_pattern
    

修改core dump文件路徑

  • 方法1-臨時修改

    修改 /proc/sys/kernel/core_pattern 文件,但/proc目錄本身是動態加載的,每次系統重啓都會重新加載,因此這種方法只能作爲臨時修改。

    例如:

    #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當時的系統狀態,可通過以下參數來豐富core文件的命名:

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

測試是否能生成core文件

首先,向目標進程發送信號產生coredump

#kill -s SIGSEGV $$

這裏,使用當前進程的進程號,即 $$

其次,根據前面配置的文件路徑,查看對應目錄下是否生成了coredump文件

參考

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

  • https://www.jianshu.com/p/dc7e7bd7d1a2

  • linux下生成core dump文件方法及設置

    登陸 LINUX 服務器,任意位置鍵入
    echo "ulimit -c 1024" >> /etc/profile
    退出 LINUX 重新登陸 LINUX
    鍵入 ulimit -c
    如果顯示 1024 那麼說明 coredump 已經被開啓。
    1024 限制產生的 core 文件的大小不能超過 1024kb,可以使用參數unlimited,取消該限制
    ulimit -c unlimited
    
    
     . 設置 Core Dump 的核心轉儲文件目錄和命名規則
     /proc/sys/kernel/core_uses_pid 可以控制產生的 core 文件的文件名中是否添加 pid 作爲擴展 ,如果添加則文件內容爲 1 ,否則爲 0
     proc/sys/kernel/core_pattern 可以設置格式化的 core 文件保存位置或文件名 ,比如原來文件內容是 core-%e
     可以這樣修改 :
     echo "/corefile/core-%e-%p-%t" > core_pattern
     將會控制所產生的 core 文件會存放到 /corefile 目錄下,產生的文件名爲 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.設置core文件大小
    列出所有資源的限制: ulimit -a
    1240
    ulimit -a.png
    或者查看core file size: ulimit -c
    
    core file size:
    unlimited:core文件的大小不受限制
    0:程序出錯時不會產生core文件
    1024:代表1024k,core文件超出該大小就不能生成了
    設置core文件大小: ulimit -c fileSize
    
    注意:
    儘量將這個文件大小設置得大一些,程序崩潰時生成Core文件大小即爲程序運行時佔用的內存大小。可能發生堆棧溢出的時候,佔用更大的內存
    
    
    2.設置core文件的名稱和文件路徑
    默認生成路徑:輸入可執行文件運行命令的同一路徑下
    默認生成名字:默認命名爲core。新的core文件會覆蓋舊的core文件
    a.設置pid作爲文件擴展名
    
    1:添加pid作爲擴展名,生成的core文件名稱爲core.pid
    0:不添加pid作爲擴展名,生成的core文件名稱爲core
    修改 /proc/sys/kernel/core_uses_pid 文件內容爲: 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文件統一生成到/corefile目錄下,產生的文件名爲core-命令名-pid-時間戳
    以下是參數列表:
    %p - insert pid into filename 添加pid(進程id)
    %u - insert current uid into filename 添加當前uid(用戶id)
    %g - insert current gid into filename 添加當前gid(用戶組id)
    %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的命令名
    
    3.測試是否能生成core文件
    kill -s SIGSEGV $$
    查看/corefile目錄下是否生成了core文件
    
  • https://blog.csdn.net/yasi_xi/article/details/16118349

    最近遇到一個問題,SUSE Linux系統中的某個應用程序異常而最終引發了系統core dump,但遺憾的時在系統重啓後並沒有找到core文件,影響了我們對問題的分析定位。
    
    經過分析發現系統默認的core文件生成路徑是/var/logs,但/var/logs目錄並非系統自帶的,系統初始安裝默認自帶的是/var/log,最終導致該系統出現core dump後並沒能生成core文件,因此如何查詢和修改系統默認的core dump文件生產路徑呢?方法如下:
    
    一. 查詢core dump文件路徑:
    方法1:
    # cat /proc/sys/kernel/core_pattern
    
    方法2:
    # /sbin/sysctl kernel.core_pattern
    
    二. 修改core dump文件路徑:
    方法1:臨時修改:修改/proc/sys/kernel/core_pattern文件,但/proc目錄本身是動態加載的,每次系統重啓都會重新加載,因此這種方法只能作爲臨時修改。
    /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當時的系統狀態,可通過以下參數來豐富core文件的命名:
    %% 單個%字符
    %p 所dump進程的進程ID
    %u 所dump進程的實際用戶ID
    %g 所dump進程的實際組ID
    %s 導致本次core dump的信號
    %t core dump的時間 (由1970年1月1日計起的秒數)
    %h 主機名
    %e 程序文件名
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章