2011-01-27 47 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参数核心文件。