如何在Ruby中分析垃圾收集

And*_*imm 5 ruby profiling garbage-collection yarv

我正在尝试在非Rails应用程序中分析GC,最好使用YARV Ruby.

perftools.rb告诉我,我的大部分CPU时间都花在了garbage_collector(6061(61.4%))上.

我还能够通过perftools.rb获取通过哪些方法创建的对象数量.有些方法比其他方法创建更多的对象,但它并没有极端偏斜.

我从哪里开始?是否有可能获得更详细的信息,说明为什么花费这么多时间做GC?是否可以查看是否花费时间去除对象,或者是否花费在检查对象是否应该被垃圾收集?

我可以访问OS X Lion,Windows 7和Ubuntu 12.04.

hel*_*inz 1

在 osx 上你有 dtrace。YARV ruby​​ 中有 dtrace 提供程序。

您可以使用几个与 GC 相关的探针:

gc-begin gc-end gc-mark-begin gc-mark-end gc-sweep-begin gc-sweep-end

我认为它们可以帮助您找到程序中的 GC 正在做什么。查看此文件以了解如何使用它们:https://github.com/tenderlove/ruby/blob/probes/test/dtrace/test_gc.rb

这篇文章有更多解释:http://tenderlovemaking.com/2011/06/29/i-want-dtrace-probes-in-ruby.html

ruby http://bugs.ruby-lang.org/issues/2565中打开了一个错误,您可以在其中找到适用于 ruby​​ 的补丁来进行这些探测器,或者您可以使用https://github.com/tenderlove/ruby /tree/probes已应用补丁的位置。

希望这可以帮助