linux下core file size設定筆記

散盡浮華發表於2018-01-08

 

現象說明:突然發現一臺測試機器的java程式莫名其妙地沒了,但是沒有core dump!這就需要開啟伺服器的core檔案生成的功能了,(即core dump檔案),方便程式除錯。
1)core檔案簡介
core檔案其實就是記憶體的映像,當程式崩潰時,儲存記憶體的相應資訊,主用用於對程式進行除錯。當程式崩潰時便會產生core檔案,其實準確的應該說是core dump 檔案,預設生成位置與可執行程式位於同一目錄下,檔名為core.***,其中***是某一數字。
2)開啟或關閉core檔案的生成

檢視core檔案生成功能是否開啟,如下若是0,則表示沒有開啟。
[root@localhost ~]# ulimit -c
0

臨時設定(如下設定2G,單位為kbyte)
如果生成的資訊超過此大小,將會被裁剪,最終生成一個不完整的core檔案。在除錯此core文 件的時候,gdb會提示錯誤。
[root@localhost ~]# ulimit -c 4194304 

永久設定
[root@localhost ~]# echo " * soft core 4194304" >> /etc/security/limits.conf
[root@localhost ~]# echo " * hard core 4194304" >> /etc/security/limits.conf 

[root@localhost ~]# ulimit -a
core file size          (blocks, -c) 4194304
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 15189
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 65535
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 10240
cpu time               (seconds, -t) unlimited
max user processes              (-u) 102400
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

若ulimit -c unlimited,則表示core檔案的大小不受限制
[root@localhost ~]# ulimit -c unlimited

3)core檔案的使用

在core檔案所在目錄下鍵入:
[root@localhost ~]# gdb -c core   (-c指定core檔案)
它會啟動GNU的偵錯程式,來除錯core檔案,並且會顯示生成此core檔案的程式名,中止此程式的訊號等等

如果你已經知道是由什麼程式生成此core檔案的,比如MyServer崩潰了生成core.12345,那麼用此指令除錯:
[root@localhost ~]# gdb -c core MyServer

4)產生core檔案的測試

直接輸入指令:
[root@localhost ~]# kill -s SIGSEGV $$

擴充套件:
ulimint -a 用來顯示當前的各種使用者程式限制

Linux對於每個使用者,系統限制其最大程式數,為提高效能,可以根據裝置資源情況,
設定個Linux使用者的最大程式數,一些需要設定為無限制:
資料段長度:ulimit -d unlimited
最大記憶體大小:ulimit -m unlimited
堆疊大小:ulimit -s unlimited

5)core檔案的名稱和生成路徑

core檔案生成路徑:
輸入可執行檔案執行命令的同一路徑下。

若系統生成的core檔案不帶其它任何副檔名稱,則全部命名為core。新的core檔案生成將覆蓋原來的core檔案。

1)/proc/sys/kernel/core_uses_pid可以控制core檔案的檔名中是否新增pid作為擴充套件。檔案內容為1,表示新增pid作為副檔名,
生成的core檔案格式為core.xxxx;為0則表示生成的core檔案同一命名為core。
可通過以下命令修改此檔案:
# echo "1" > /proc/sys/kernel/core_uses_pid

2)proc/sys/kernel/core_pattern可以控制core檔案儲存位置和檔名格式。
可通過以下命令修改此檔案,可以將core檔案統一生成到/corefile目錄下,產生的檔名為core-命令名-pid-時間戳
# echo "/corefile/core-%e-%p-%t" > core_pattern

以下是引數列表:
    %p - insert pid into filename 新增pid
    %u - insert current uid into filename 新增當前uid
    %g - insert current gid into filename 新增當前gid
    %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 新增命令名

相關文章