【问题标题】:Garbage collector tuning in Ruby 1.9Ruby 1.9 中的垃圾收集器调优
【发布时间】:2011-02-13 16:25:11
【问题描述】:

我知道GC.enable/disable,但是有什么方法可以更详细地控制 Ruby 1.9 垃圾收集器吗?

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

【问题讨论】:

    标签: ruby garbage-collection


    【解决方案1】:

    是的,简称。

    首先,基本常量,定义 GC 行为(显示默认值):

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

    More details about GC, may help

    A story from 37signals 伙计们,这可能会对您有所帮助。他们按时使用手动 GC 调用 (GC.start),而不是内存大小,并获得了巨大的提升。

    【讨论】:

    • Aman & Joe 在他们的演示文稿中谈到了这些常量,但据我所知,它们实际上与我在问题中提到的 REE 设置相同。我错了吗,或者你能给我一个如何在香草 Ruby 1.9 VM 中使用它们的例子吗?
    • 我很确定这是 1) 只有 1.8.7 和 2) 即使在 1.8.7 上也需要您修补和编译自定义 VM。有一个 1.9.2 的新补丁在您回答后很久才发布,但它仍然需要您编译自定义 VM。
    【解决方案2】:

    没有。

    无法调整 1.9.0–1.9.2 GC。但是,您可以编译一个自定义 VM,该 VM 使用this patch 公开或多或少与 REE 相同的调整参数。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-18
    • 1970-01-01
    • 2018-12-30
    • 1970-01-01
    相关资源
    最近更新 更多