我正在寻找一种方法来select核心转储中包含的部分和内存区域。
我的应用程序的核心转储大小约为30GB,其中大部分是预分配的缓冲区,我甚至不需要debugging(以后可以清零)。 但是,由于转储过大,应用程序花费太多时间才能完成崩溃并开始恢复。
任何人都可以想到一种方法来提前select哪些细分市场将在核心转储?
谢谢
根据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配置选项构建时才提供。
我不确定是否可以设置转储内存的哪一部分。
从man 5 core
磁盘文件在终止时包含进程内存的映像
作为一个选项,您可以使用带有RLIMIT_CORE
参数的setrlimit
截断核心文件。