Linux中的选择性核心转储 - 如何选择转储的部分?

Ore*_*n S 11 linux memory coredump

我正在寻找一种方法来选择核心转储中包含的部分和内存区域.
我的应用程序的核心转储大小约为30GB,大部分都在预先分配的缓冲区中,我甚至不需要在调试中(以后可以归零).但是,由于转储太大,应用程序完成崩溃并开始恢复需要花费太多时间.
任何人都可以想到一种方法来提前选择哪些细分市场将在核心转储中?
谢谢

Has*_*kun 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.
Run Code Online (Sandbox Code Playgroud)

默认情况下,设置以下位:0,1,4(如果启用了CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS内核配置选项),以及5.此文件的值以十六进制显示.(默认值因此显示为33.)永远不会转储内存映射的I/O页(如帧缓冲区),并且无论coredump_filter值如何,都会转储虚拟DSO页.

...

仅当使用CONFIG_ELF_CORE配置选项构建内核时,才会提供此文件.