現象說明:忽然發現一臺測試機器的java程序莫名其妙地沒了,可是沒有core dump!這就須要打開服務器的core文件生成的功能了,(即core dump文件),方便程序調試。
1)core文件簡介
core文件其實就是內存的映像,當程序崩潰時,存儲內存的相應信息,主用用於對程序進行調試。當程序崩潰時便會產生core文件,其實準確的應該說是core dump 文件,默認生成位置與可執行程序位於同一目錄下,文件名爲core.***,其中***是某一數字。
2)開啓或關閉core文件的生成java
查看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文件的使用bash
在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文件的名稱和生成路徑app
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 添加命令名