本文講述利用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文件
參考
-
登陸 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 程序文件名