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

发布于 2024-10-14 07:10:02 字数 180 浏览 5 评论 0原文

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

I am looking for a way to select the sections and memory regions included in a core dump.
My application's core dump size is about 30GB, most of it is in preallocated buffers which I don't even need in debugging (and can be zeroed later). However, since the dump is so big, it takes too much time for the application to finish crashing and begin recovery.
Can anyone think of a way to select in advance which segments will be in the core dump?
Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

有深☉意 2024-10-21 07:10:02

根据 core(5)< /code>手册页,您可以设置将哪些映射写入核心文件:

从内核 2.6.23 开始,
Linux 特定的
/proc/PID/coredump_filter 文件即可
用于控制哪些内存段
被写入核心转储文件中
发生核心转储的事件
为该过程执行
对应的进程ID。

文件中的值是位掩码
内存映射类型(请参阅 mmap(2))。
如果掩码中设置了一位,则
对应的内存映射
类型被转储;否则他们是
没有被抛弃。该文件中的位
有以下含义:

 位 0 转储匿名私有映射。
       位 1 转储匿名共享映射。
       位 2 转储文件支持的私有映射。
       位 3 转储文件支持的共享映射。
       位 4(自 Linux 2.6.24 起)
              转储 ELF 标头。
       位 5(自 Linux 2.6.28 起)
              转储私有大页面。
       位 6(自 Linux 2.6.28 起)
              转储共享大页面。

默认情况下,设置以下位:0、1、4(如果
CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS
内核配置选项已启用),以及 5.
该文件的值以十六进制显示。 (这
默认值因此显示为 33。)
内存映射 I/O 页(例如帧缓冲区)永远不会被转储,并且
虚拟 DSO 页始终被转储,无论 coredump_filter 为何
值。

...

仅当内核是使用以下命令构建时才提供此文件
CONFIG_ELF_CORE 配置选项。

According to the core(5) manpage, you can set which mappings are written to the core file:

Since kernel 2.6.23, the
Linux-specific
/proc/PID/coredump_filter file can be
used to control which memory segments
are written to the core dump file in
the event that a core dump is
performed for the process with the
corresponding process ID.

The value in the file is a bit mask of
memory mapping types (see mmap(2)).
If a bit is set in the mask, then
memory mappings of the corresponding
type are dumped; otherwise they are
not dumped. The bits in this file
have the following meanings:

       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.

By default, the following bits are set: 0, 1, 4 (if the
CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS
kernel configuration option is enabled), and 5.
The value of this file is displayed in hexadecimal. (The
default value is thus displayed as 33.)
Memory-mapped I/O pages such as frame buffer are never dumped, and
virtual DSO pages are always dumped, regardless of the coredump_filter
value.

...

This file is only provided if the kernel was built with the
CONFIG_ELF_CORE configuration option.

二手情话 2024-10-21 07:10:02

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

来自man 5 core

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

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

I'm not sure if it is possible to set which part of the memory to dump.

From man 5 core

disk file containing an image of the process's memory at the time of termination

As an option you can truncate core file using setrlimit with a RLIMIT_CORE parameter.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文