我正在尝试在非 Rails 应用程序中分析 GC,最好使用 YARV Ruby。
perftools.rb 告诉我我的大部分 CPU 时间花在了 garbage_collector (6061 (61.4%))。
我还可以使用 perftools.rb 获取通过哪些方法创建了多少个对象。有些方法创建的对象比其他方法多,但并没有严重偏差。
我从这里去哪里?是否有可能获得更详细的信息,说明为什么要花这么多时间做 GC?是否可以查看时间是花在清除对象上,还是花在检查对象是否应该进行垃圾回收上?
我可以访问 OS X Lion、Windows 7 和 Ubuntu 12.04。
最佳答案
在 osx 上你有 dtrace。 YARV ruby 中有 dtrace 提供程序。
您可以使用一些与 GC 相关的探测器:
gc-开始 垃圾回收结束 gc-标记-开始 gc-标记结束 gc-sweep-开始 gc-sweep-结束
我认为它们可以帮助找到您程序中的 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已经应用补丁的地方。
希望对你有帮助
关于ruby - 如何分析 Ruby 中的垃圾回收,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11463277/