Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux中的选择性核心转储-如何选择转储的部分?_Linux_Memory_Coredump - Fatal编程技术网

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

Linux中的选择性核心转储-如何选择转储的部分?,linux,memory,coredump,Linux,Memory,Coredump,我正在寻找一种方法来选择包含在核心转储中的节和内存区域。 我的应用程序的核心转储大小约为30GB,其中大部分位于预分配的缓冲区中,调试时甚至不需要这些缓冲区(以后可以归零)。但是,由于转储太大,应用程序完成崩溃并开始恢复需要花费太多时间。 有人能想出一种方法提前选择哪些段将在核心转储中吗? 谢谢我不确定是否可以设置要转储的内存部分 从man 5 core 包含进程终止时内存映像的磁盘文件 作为一个选项,您可以使用setrlimit和RLIMIT\u core参数截断核心文件。根据手册页,您可以设

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

谢谢

我不确定是否可以设置要转储的内存部分

man 5 core

包含进程终止时内存映像的磁盘文件

作为一个选项,您可以使用
setrlimit
RLIMIT\u core
参数截断核心文件。

根据手册页,您可以设置哪些映射写入核心文件:

自内核2.6.23以来 特定于Linux的 /proc/PID/coredump\u过滤器文件可以是 用于控制哪些内存段 在中写入核心转储文件 核心转储失败的事件 为具有的流程执行 对应的进程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(如果 配置\核心\转储\默认\ ELF\头 内核配置选项已启用)和5。 此文件的值以十六进制显示。(修订) 因此,默认值显示为33。) 内存映射的I/O页(如帧缓冲区)永远不会转储,并且 无论coredump_过滤器如何,虚拟DSO页面始终被转储 价值观

仅当内核是使用 配置ELF核心配置选项


谢谢正是我想要的。