使用BleakHouse发现Rails应用的内存泄漏

尽管Rails的敏捷性从来没有人质疑过,但它的性能却常常是人们争论的热点。

DTrace是由Twitter团队近期提供的一个很好用的分析应用程序行为的动态框架。另外,Evan Weaver开发了一个新的工具,Rails的插件BleakHouse,用来处理内存问题。像Ruby这样的动态语言所具备的优势之一就是其内省(Introspect)的能力:在应用程序的内部就可以检查你应用程序的状态,但是大家在使用ObjectSpace(Ruby被垃圾收集的对象堆探测器)时应当多加留心。诚然,BleakHouse在最初的版本使用了ObjectSpace对Rails应用进行快照,但Evan Weaver发现ObjectSpace并不是量子化的:使用ObjectSpace将会改变它自己的状态。

目前,BleakHouse使用的是一个无泄漏的C语言实现,直接使用堆,其优势是目前可以直接根据实际内存使用量画出图表(交换内存、实际内存和组合内存),并且比以前运行得更快。

它可以按控制器、Action和类来生成参考图表。

BleakHouse要用到gruff(因此也要用到rmagick)。由于它是用C语言实现的,它还需要一个打了补丁的Ruby二进制文件来监视应用程序。一旦插件安装完成并且环境被设置为产品环境(Production)时,你就可以跟踪你的应用了。最后,你可以通过运行rake来生成这些图表。

使用BleakHouse发现Rails应用的内存泄漏_第1张图片 使用BleakHouse发现Rails应用的内存泄漏_第2张图片 使用BleakHouse发现Rails应用的内存泄漏_第3张图片

BleakHouse向InfoQ提醒到Charles Nutter关于使Ruby更为好用的第五条建议:把ObjectSpace丢在一边,尤其是当人们最终必须通过对VM打补丁的方式来进行监视的时候:

由于限制了Ruby的垃圾回收机制和线程子系统,ObjectSpace给Ruby带来损害,因此应当弃之不用。

Java有不少高效的堆分析工具,你可能会想,用于Ruby的RProbe和RProfiler在哪儿呢?我认为,随着时间的增长,新的VM被引入,并且更多的公司参与进来,这样的工具最终会出现在人们面前的……

查看英文原文:Find Memory Leaks in Your Rails Application with BleakHouse

你可能感兴趣的:(使用BleakHouse发现Rails应用的内存泄漏)