5

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

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

我还可以使用 perftools.rb 获取哪些方法创建了多少对象。有些方法比其他方法创建更多的对象,但它并没有极度倾斜。

我从这里去哪里?是否有可能获得有关为什么要花这么多时间进行 GC 的更详细信息?是否可以查看是否花费了时间来摆脱对象,或者是否花费了检查对象是否应该被垃圾收集?

我可以访问 OS X Lion、Windows 7 和 Ubuntu 12.04。

4

1 回答 1

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已应用补丁的位置。

希望这可以帮助

于 2012-07-16T14:41:55.690 回答