2011-01-27 44 views
11

我正在尋找一種方法來選擇核心轉儲中包含的部分和內存區域。
我的應用程序的核心轉儲大小約爲30GB,其中大部分是預分配的緩衝區,我甚至在調試時甚至不需要(以後可以調零)。但是,由於轉儲非常大,應用程序需要很長時間才能完成崩潰並開始恢復。
任何人都可以想出一種方法來預先選擇哪些段將在覈心轉儲中?
謝謝Linux中的選擇性核心轉儲 - 如何選擇轉儲的部分?

回答

16

按照core(5)手冊頁,可以設置哪些映射寫入核心文件:

由於內核2.6.23的Linux特定 的/ proc/PID/coredump_filter文件可以 用於控制將哪個內存段 寫入到核心轉儲文件 中,該核心轉儲是 對於 對應的進程ID執行的進程。

該文件中的值是 內存映射類型的位掩碼(請參見mmap(2))。 如果在掩碼中設置了一個位,則會轉儲 類型的內存映射;否則他們是 不傾銷。 具有以下含義在此文件中位:

 bit 0 Dump anonymous private mappings. 
     bit 1 Dump anonymous shared mappings. 
     bit 2 Dump file-backed private mappings. 
     bit 3 Dump file-backed shared mappings. 
     bit 4 (since Linux 2.6.24) 
       Dump ELF headers. 
     bit 5 (since Linux 2.6.28) 
       Dump private huge pages. 
     bit 6 (since Linux 2.6.28) 
       Dump shared huge pages. 

默認情況下,下面的位被設置:0,1,4(如果 CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS 內核配置選項被激活),和5. 的此文件的值以十六進制顯示。 (因此 默認值顯示爲33.) 內存映射I/O頁(如幀緩衝區)永遠不會轉儲,並且無論coredump_filter 值如何,始終都會轉儲虛擬DSO頁。

...

這個文件如果內核是用 CONFIG_ELF_CORE配置選項內置僅供。

+0

謝謝。正是我在找什麼。 – 2011-01-31 05:28:46

0

我不確定是否可以設置轉儲內存的哪一部分。含有終止

作爲一個選項的時間進程的內存映像

man 5 core

磁盤文件可以截斷使用setrlimitRLIMIT_CORE參數核心文件。