2011-01-14 516 views
20

我知道Valgrind,但它只是检测内存管理问题。我所搜索的是一个工具,它给了我一个概述,我的程序的哪些部分会消耗多少内存。用例如图形表示一个树形图(就像KCachegrind为Callgrind所做的那样)会很酷。如何分析内存使用情况?

我正在一台Linux机器上工作,所以windows工具对我无能为力。

回答

20

使用massif,它是Valgrind工具的一部分。 massif-visualizer可以帮助您绘制数据图表,或者您可以使用ms_print命令。

+0

谢谢,截图看起来非常棒...,我想这就是我一直想要的。 – math 2011-01-14 12:45:29

4

尝试使用gperftools由Google提供的heap profiler。我一直都是从源头上构建它的,但它在几个Linux发行版下作为precompiled package提供。

这与将动态库链接到可执行文件并运行该程序一样简单。它(据我见过的)收集关于每个动态内存分配的信息,并保存到磁盘每次出现以下情况之一一内存转储

  • HEAP_PROFILE_ALLOCATION_INTERVAL字节已被该程序分配(默认:1GB)
  • 高水位的内存使用情况标志由HEAP_PROFILE_INUSE_INTERVAL字节(默认值增加:100兆)
  • HEAP_PROFILE_TIME_INTERVAL秒后(默认:激活)
  • 你显式调用HeapProfilerDump()从您的代码

最后一个,在我的经验,是最有用的,因为你可以控制什么时候有堆使用的快照,然后比较两个不同的快照,看看有什么不对。

最终,有几个可能的输出格式,比如文本或图形(在一个有向图的形式):

Graph of memory usage

使用该工具我已经能够发现不正确存储器使用量即我找不到使用Massif。