Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.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_Gdb_Coredump - Fatal编程技术网

Linux 如何通过删除大型数据结构来缩小大型核心转储?

Linux 如何通过删除大型数据结构来缩小大型核心转储?,linux,gdb,coredump,Linux,Gdb,Coredump,我们的进程可以使用100GB的RAM,这显然会造成核心转储文件大小的问题。大文件是不好的,因为它们需要很长的时间来写入,但是(对我们来说更糟的是)它们可能会填满它们所写入的分区 此外,如果核心文件位于远程位置,我们可能希望通过WAN传输它,通常需要几天的时间 显然,我们可以压缩核心,这可能会减小尺寸。我想做的是操纵核心,从核心文件中删除一些较大的数据结构,将其缩小到更易于管理的大小 从内部来看,我们可以捕获SEGV并手动编写内核转储 从“外部”开始,我们可以编写一些gdb魔术来确定大型结构的位置

我们的进程可以使用100GB的RAM,这显然会造成核心转储文件大小的问题。大文件是不好的,因为它们需要很长的时间来写入,但是(对我们来说更糟的是)它们可能会填满它们所写入的分区

此外,如果核心文件位于远程位置,我们可能希望通过WAN传输它,通常需要几天的时间

显然,我们可以压缩核心,这可能会减小尺寸。我想做的是操纵核心,从核心文件中删除一些较大的数据结构,将其缩小到更易于管理的大小

从内部来看,我们可以捕获SEGV并手动编写内核转储

从“外部”开始,我们可以编写一些gdb魔术来确定大型结构的位置,将它们归零,然后进行压缩


这两种方法都不太吸引人

是否控制哪些映射写入核心转储帮助?另请参阅。@tink,是控制映射可能会有帮助。需要检查我们的内核有多古老,然后考虑使用不同的映射。这也是我在漫游中发现的。@devnull-no-ulimit是完全无用的,它只是截断,并创建一个不可用的核心。如果我们不想使用内核,我们根本不会生产一个。我可能会尝试另一种方法:要么使用类似ABRT的东西,要么进行只保存堆栈的内核转储。用这个来稍微分析一下bug。然后使用gdbserver和tracepoint功能从正在运行的系统捕获数据,以查看在发生故障之前是否可以捕获有用的数据。教gdb关于堆的内容是很棘手的。。。这是可以做到的(搜索“gdb堆”项目),但它肯定不会加快制作核心的过程。。。