BleakHouse 4! Find memory leak in your Ruby program!

April 6, 2008 – 9:09 pm

今天看到 BleakHouse 发布了第 4 版的消息:采用了全新的实现:

…there is no framing necessary, and the analysis task runs in seconds instead of hours.

我在“内存泄漏分析工具的尴尬”这篇文章中曾经介绍过 BleakHouse ,不过那个时候用
BleakHouse 会产生出无比巨大的 dump 文件,并且分析过程需要花费非常多的内存和时间,有时基本成了不可能完成的任务。现在看到 v4 发布消息里提到了新的实现,实在是大喜!因为这本身是一个非常不错的工具。如果你有发现你的 Ruby 程序性能低下,一定要试一试这个工具:

sudo gem install bleak_house

然后:

require 'rubygems'
require 'bleak_house'
 
# .. rest of your program

再用 ruby-bleak-house 来运行你的程序:

$ ruby-bleak-house foo.rb
** Bleakhouse: installed
** BleakHouse: working...
** BleakHouse: complete
** Bleakhouse: Run 'bleak /tmp/bleak.10702.0.dump' to analyze.

然后按照提示运行

bleak /tmp/bleak.10702.0.dump

就可以分析数据了。我还没有来得及仔细尝试新版本的 BleakHouse ,不过大致来说几个以前版本的最让人不满意的问题差不多都解决了:

  • Dump 的数据过于巨大。我想由于现在是对对象的生命期进行跟踪,而不是对每个调用帧进行跟踪,所以不需要生成那么多的数据了。
  • 分析过程过于耗时耗内存。过去是几个小时,现在是几秒钟,天壤之别啊! :D
  • 何处插入分析语句?以前的版本要手工在程序里插入对 snapshot 方法的调用来 dump 数据,问题在于:如果我不知道哪里内存泄漏了,如何能在合适的地方插入数据呢?如果我知道了哪里内存泄漏了,就没有必要再用 BleakHouse 来分析了。而新版本里这个过程似乎省去了,正如前面提到的,如果是跟踪对象的诞生,而不是记录每个栈帧的话,这个过程必定要自动完成了。

另外,纯 C 的实现让你可以在几乎不损失性能的情况下直接用 ruby-bleak-house 来跑你的 production 代码。这个版本还包含了其他各种改进。总之是激动人心啊!

我在前不久提交了一个改进 Ruby 的内存分析工具的 Proposal 到 GSoC ,现在看来这个项目似乎是不需要了。 ;)

  1. 3 Responses to “BleakHouse 4! Find memory leak in your Ruby program!”

  2. 垂涎中… 我也想投奔Ruby了。

    By quark on Apr 6, 2008

  3. There’s more work to be done, so maybe your proposal is not useless. I’d be happy if you wanted to contribute to BleakHouse.

    Other things that should be added:

    * Track the entire backtrace instead of just most recent node. This will require jumping up the node tree on each allocation, and either a fixed or expanding array of sourceline pointers. This is relatively straightforward.

    * Reference tracking, so that we can display both where the object came from, and why the GC marked it. This will work similar to the source tracking, but happen at snapshot time and not need to be stored in the RValue union. This is hard.

    After that our leak troubles will be over.

    By Evan on Apr 7, 2008

  4. @Evan:
    Thank you for such a great tool! BleakHouse (especially the new version) is really awesome!

    I’m sure it will become better an better as you have a clear TODO list. :)

    By pluskid on Apr 7, 2008

Post a Comment