如何从核心转储中分析内存使用情况?

Posted

技术标签:

【中文标题】如何从核心转储中分析内存使用情况?【英文标题】:How to analyze memory usage from a core dump? 【发布时间】:2011-06-09 02:49:08 【问题描述】:

我在 Linux 下有一个核心转储。该过程继续进行内存分配横冲直撞,我至少需要找到发生这种情况的库。

您建议使用什么工具来大致了解内存的去向?我知道这个问题很难/完全无法解决。任何至少可以提供一些线索的工具都会有所帮助。

[这是一个python进程,怀疑内存分配是由用C编写的自定义模块之一引起的]

【问题讨论】:

我尝试了几种不同的工具:直接 gdb、gdb + libpython、gdbheap、自定义 .gdbinit。 我想类似的问题已经在这里解决了:segmentation fault - core dump in python C-extension 【参考方案1】:

尝试在启用调用图的 python 进程上运行 linux perf 工具。 如果它的多线程进程将所有关联的 LWP 作为参数。

【讨论】:

【参考方案2】:

问题:需要找出哪个库内存出现故障。

解决方案:

1) 使用 valgrind 找出 Invalid Write 或 Invalid Free of Memory

$ valgrind --tool=memcheck --error-limit=no --track-origins=yes (python your script) 

2) 使用 gdb 的 mmap 命令找出库在哪个地址空间

$ gdb (your executable) -c (core)
$ vmmap 

【讨论】:

以上是关于如何从核心转储中分析内存使用情况?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Python 中分析内存使用情况?

如何在 C 中分析 openMPI 程序的内存使用情况和性能

如何从启用优化(发布模式)构建的二进制文件中分析故障转储?

在任务管理器和 ANTS 分析器中分析的内存使用情况

在 Linux 上的 C++ 程序中分析常驻内存使用情况和许多页面错误

使用 Valgrind 在 Python 程序中分析内存时遇到问题