Linux核心转储过大!

最近我一直在注意到由我的应用程序生成的核心转储大小的增加。 最初,它们大小只有5MB左右,包含了大约5个堆栈,现在我拥有大于2GB的核心转储,其中包含的信息与较小的转储没有区别。

有什么办法可以控制生成的核心转储的大小吗? 它们不应该至less比应用程序本身小吗?

二进制文件是这样编译的:

  • 在释放模式下用debugging符号进行编译(即GCC中的-g编译器选项)。
  • debugging符号被复制到一个
    单独的文件和剥离
    二进制文件。
  • GNUdebugging符号链接被添加到二进制文件。

在应用程序开始时,有一个调用setrlimit ,它将核心限制设置为无穷大 – 这是问题吗?

Solutions Collecting From Web of "Linux核心转储过大!"

是的 – 不要分配这么多的内存:-)

核心转储包含应用程序地址空间的完整映像,包括代码,堆栈和堆(malloc'd对象等)

如果你的核心转储大于2GB,这意味着在某个时候你分配了大量的内存。

您可以使用setrlimit来设置核心转储大小的下限,最终有可能无法解码的核心转储(因为它不完整)。

是的,setrlimit是为什么你会得到大的核心文件。 你可以在大多数shell中设置核心大小的限制,例如在bash中你可以执行ulimit -c 5000000 。 但是,您的setrlimit调用将覆盖。

/etc/security/limits.conf也可以用来设置核心大小的上限。