core文件的產生和使用


最近公司一個用golang寫的restful服務突然出現了core,最終查到的原因是,golang程序在運行的時候系統啟動另一個占用內存比較大的程序,導致系統內存不足(out of memory),啟動了OOM,golang程序被異常殺掉,產生了core文件。第一次排查core的問題,作此記錄。

core文件產生原因

在程序奔潰時,內核會生成一個core文件,即程序最后 奔潰的內存映像,和程序調試信息。之后可以通過gdb,打開core文件查看程序奔潰時的堆棧信息,可以找出程序出錯的代碼所在文件和函數。

 

core文件調試

gdb ./test core.123 (test為產生core的可執行程序,core.123為該程序產生的core文件)

 

core文件的生成開關和大小限制

  1. 使用ulimit -a命令,可以查看core文件的生成開關和大小限制所有信息
  2. 使用umlimt -c 命令可查看core文件的生成開關。若結果為0,則表示關閉了 此功能,不會生成core文件
  3. 使用ulimt -c filesize命令,可以限制core文件的大小(filesize的單位為kbyte)。若ulimit -c unlimited,則表示core文件的大小不受限制。

 

core文件的名稱和生成路徑

若未設置core文件生成路徑和名稱,默認生成在可執行文件運行命令的同一路徑下,命名為core。新的core文件生成將覆蓋原來的core文件。

  1. core文件保存位置和文件名設置,通過編輯proc/sys/kernel/core_pattern,設置文件路徑和文件名

echo "/corefile/core-%e-%p-%t" > core_pattern

所產生的core文件會存放在/corefile目錄下,產生的文件名為core-命令名-pid-時間戳

文件名參數列表:

%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 添加命令名

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM