如何记录程序上的每个内存分配和解除分配?

时间:2010-01-22 12:50:26

标签: memory heap valgrind fragmentation

我希望看到碎片是增加我的扭曲服务器内存使用率的原因。我在这里发了一个问题: How to find the source of increasing memory usage of a twisted server?

现在,我要做的是将堆可视化。我找到了一篇文章:Memory fragmentation。那篇文章中的堆数就像我想要的那样。我用matplotlib或其他工具绘制这样的图形并不困难。最困难的工作是:如何记录内存分配和释放?

我知道我可以修改CPython的源代码,在omalloc.c中添加一些日志代码并重新编译Python,并使用修改后的CPython来运行我的服务器。但是,我不想浪费时间。然后我正在寻找一些可用的工具。我知道有一个工具 valgrind 可以用来检测内存泄漏,但我不知道如何记录分配和释放。我看到它的memcheck可以检测到类似的东西:

  • 无效阅读
  • 未初始化
  • 免费无效

但这不是我想要的,我只需要:

  • 记录内存的每个分配和解除分配的时间,地址和大小

我的问题是:

  1. 我怎么能用valgrind做到这一点?
  2. 如果我不能,我应该为此写一个模块吗?
  3. 或者有更好的工具可以达到这个目的吗?
  4. 感谢。

1 个答案:

答案 0 :(得分:0)

回答有关替代工具的问题:

我知道有“Pin”工具,也许值得一试:http://www.pintool.org/