linux下core file size設置筆記

現象說明:突然發現一臺測試機器的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 添加命令名

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章