【问题标题】:Selective core dump in Linux - How can I select the dumped sections?Linux 中的选择性核心转储 - 如何选择转储的部分?
【发布时间】:2011-01-27 14:52:04
【问题描述】:

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

【问题讨论】:

    标签: linux memory coredump


    【解决方案1】:

    根据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 页面(例如帧缓冲区)永远不会转储,并且 虚拟 DSO 页面总是被转储,不管​​ coredump_filter 价值。

    ...

    仅当内核使用 CONFIG_ELF_CORE 配置选项。

    【讨论】:

    • 谢谢。正是我想要的。
    【解决方案2】:

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

    来自man 5 core

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

    作为一个选项,您可以使用带有RLIMIT_CORE 参数的setrlimit 截断核心文件。

    【讨论】:

      猜你喜欢
      • 2011-01-16
      • 2017-01-29
      • 2014-06-17
      • 2012-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-13
      • 2021-02-23
      相关资源
      最近更新 更多