ruby - 如何分析 Ruby 中的垃圾回收

标签 ruby garbage-collection profiling yarv

我正在尝试在非 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/

相关文章:

arrays - 在 Ruby 中创建数组

html - Bootstrap : How to center image in panel heading?

javascript - javascript垃圾收集器是否处理全局变量?

java - 在 Java 中预分配对象有哪些问题?

c++ - 与教授一起衡量绩效

ruby - 在 ruby 中计算内部 yield

ruby - Kramdown/Rouge 不突出语法?

garbage-collection - 如何获取 Google Cloud Bigtable 的垃圾收集政策?

java - 堆内存与对象内存

java - 导致 OOM 的线程的堆栈跟踪