1

我的公司正在利用 Linux(特别是 CentOS)中的 coredump 功能来追踪一些难以发现的问题。不幸的是,我们有一堆小型虚拟机在有限的 HD 空间下运行,并且由于堆占用的大量空间,完整的核心转储会导致问题。

当发生分段错误时,是否可以让 Linux 转储调用堆栈、线程和局部变量?我尝试仅将转储限制为 50 兆,但似乎并非所有所需的细节都在前 50 兆字节中(ulimit -c 51200)。我们可以像那样截断堆,但我无法找出什么大小会起作用。

我知道可以在需要时用一些额外的代码写出你自己的调用堆栈,但我们正处于结束的地步,对于我们遇到的最后几个问题来说,这将是一个很难卖的东西。

4

1 回答 1

1

您可以将核心转储通过管道传输到程序,然后编写自己的过滤器。从人核心中提取

从内核 2.6.19 开始,Linux 支持 /proc/sys/kernel/core_pattern 文件的替代语法。如果此文件的第一个字符是管道符号 (|),则该行的其余部分被解释为要执行的程序。核心转储不是写入磁盘文件,而是作为标准输入提供给程序。

您还可以控制将哪些映射写入核心转储,这可能用于减少核心转储大小。

从内核 2.6.23 开始,Linux 特定的 /proc/PID/coredump_filter 文件可用于控制将哪些内存段写入核心转储文件

当然,所有这些都取决于内核版本和配置选项。

请参阅我提供的链接以获取示例或详细信息。

于 2013-09-20T08:54:51.087 回答