Ruby 1.9中的垃圾收集器调优

19

我知道GC.enable/disable,但是否有更详细的方法来控制Ruby 1.9垃圾收集器?

在对我的代码进行性能分析时(使用perftools.rb),我注意到GC占据了总样本的高达30%,我想看看是否可能调整GC以减少此数字。是否有任何环境变量或其他方式可以设置堆插槽数量、malloc限制等,就像使用REE一样?

2个回答

11

没错,就是这个意思。

首先,以下是定义GC行为的基本常量(默认值如下):

  • RUBY_GC_MALLOC_LIMIT = 8000000 # - 在消耗完所有可用内存后分配的新内存块的初始大小
  • RUBY_HEAP_MIN_SLOTS = 10000 #- 启动时分配的初始内存大小
  • RUBY_HEAP_SLOTS_GROWTH_FACTOR = 1.8 #- 每次分配后新的内存块比前一个大X倍。
  • RUBY_HEAP_SLOTS_INCREMENT = 1 # 不太确定,老实说 :)

更多关于GC的细节,可能会有所帮助

来自 37signals 团队的一篇文章,可能会对你有很大帮助。他们在适当的时候使用手动GC调用(GC.start),而不是根据内存大小来进行,从而获得了巨大的提升。


Aman和Joe在他们的演示中谈到了这些常量,但据我所知,它们实际上是我在问题中提到的相同的REE设置。我错了吗,还是你能给我一个如何在纯Ruby 1.9 VM中使用它们的例子? - Theo
我非常确定这只适用于1.8.7版本,并且即使在1.8.7上,也需要你打补丁并编译自定义虚拟机。有一个新的1.9.2补丁发布了很久,但是仍然需要你编译自定义虚拟机。 - Theo

1

不行。

无法调整1.9.0-1.9.2的垃圾回收。但是,您可以编译自定义虚拟机,使用this patch公开与REE几乎相同的调整参数。


该要点有一条评论,建议在问题跟踪器中进行GC可配置性的设置:http://redmine.ruby-lang.org/issues/1047 - Andrew Grimm
1.9.3会像REE一样有调整参数,但是会有噪音。请参阅此帖子的评论:http://www.rubyinside.com/ruby-1-9-3-preview-1-released-5229.html - Theo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接