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