Linux core dump使用


什么是 core dump?

core dump是一個當進程意外終止時包含進程內存內容的文件。當程序崩潰的時候,core dump由kernel觸發。core dump可以作為程序崩潰時的事后快照(post-mortem snapshot),尤其是在難以可靠的重現故障的情況下。

大多數Linux系統默認開始core dump。但是通常這么做是有代價的。一方面我們想要去收集信息從而提高穩定性並且幫助我們排除故障;另一方面,我們希望限制debug的數據並且避免泄漏一些敏感數據。第一個選擇適合於研究不穩定的程序的機器。第二個選擇適用於存儲和處理敏感數據。

開啟 core dump

為了開啟core dump,我們需要打開一下系統的軟限制(soft limits)。

ulimit -S -c unlimited
  • -S:soft limit
  • -c:core dump的大小

如果想要永久的打開core dump,我們可以在 /etc/security/limits.conf 文件中添加下面這一句,

* soft core unlimited

除了指定為unlimited,即沒有大小限制外,我們還可以直接指定大小,例如

ulimit -c 1024      限制大小為1024
ulimit -c 0         限制大小為0,即不輸出core文件

當我們指定數字為0的時候,就意味着不輸出core文件了。

當我們只使用-c參數的時候,就是查看core文件的大小限制,也就是關閉了core dump。

ulimit -c

關閉 core dump

core dump 通常需要占用我們的磁盤空間並且可能會包含一些敏感數據,所以我們有的時候需要關閉它。

我們可以通過更新soft limit來關閉core dump

ulimit -S -c 0

如果想要永久的關閉core dump,我們可以在 /etc/security/limits.conf 文件中添加下面這一句,

* soft core 0
* hard core 0

core dump在哪?

Linux通過一個配置的地址來保存core dump

默認路徑是

/usr/libexec/abrt-hook-ccpp %s %c %p %u %g %t e %P %I

(%s %c %p %u %g %t e %P %I為core dump文件的命令規則,會在下一小節中解釋)

我們可以通過sysctl命令來改變這個位置

sudo sysctl -w kernel.core_pattern=/coredumps/core-%e-%s-%u-%g-%p-%t

這個命令將會更新core_pattern文件/proc/sys/kernel/core_pattern到一個新的位置。

也可以通過在/etc/sysctl.conf中添加下面的代碼來永久的改變core dump文件的路徑,

kernel.core_pattern="/coredumps/core-%e-%s-%u-%g-%p-%t"

core dump文件的命名規則

默認情況下,一個core dump文件被命名為core,但是在/proc/sys/kernel/core_pattern文件中我們可以定義core dump文件的命名規則(參考上一節中的例子)。這個規則使用%標識符來代替一些當core dump文件被創建的時候可能的傳來的值。

  • %%:一個%字符
  • %p:dumped進程的PID
  • %u:dumped進程的真實UID
  • %g:dumped進程的真實GID
  • %s:導致dump的信號個數
  • %t:dump的時間,精確到秒
  • %h:hostname
  • %e:可執行文件名
  • %c:core file大小的限制

例子

根據上面提到的命令,我們現在可以進行一些core dump的操作,查看core dump文件的大小限制、開啟core dump、更新core file pattern去存儲core dump到磁盤上。下面的操作可以看到在程序崩潰后產生了一個core dump文件。

Docker中使用core dump

在docker容器中,使用core dump需要在docker啟動的時候就做好設定。我們可以利用--ulimit參數進行設定。

docker run -it -d --name=core-test --ulimit core=-1 image-test bash

這樣在容器中,如果發生了程序崩潰,我們就可以在pwd,即當前目錄下看到core文件。

注意

  1. 如果管道符號(‘|’)被用在core file pattern中,core dump文件的大小限制就不起作用了。

參考文獻

本文部分內容翻譯自

  1. https://medium.com/@sourabhedake/core-dumps-how-to-enable-them-73856a437711
  2. http://manpages.ubuntu.com/manpages/precise/man5/core.5.html

有興趣的同學可以直接看英文原版。如有翻譯問題請在評論區指出。


免責聲明!

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



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