Ruby 2.0中的垃圾收集器调优

Fer*_*ido 33 ruby performance garbage-collection ruby-2.0

我想知道用于ruby 1.9.x的GC调优是否仍然与2.0的新实现相关.如果是这样,我们可以在新版本上配置任何新内容吗?

我说的是以下设置

RUBY_HEAP_MIN_SLOTS=600000 
RUBY_GC_MALLOC_LIMIT=59000000
RUBY_HEAP_FREE_MIN=100000
Run Code Online (Sandbox Code Playgroud)

dav*_*nes 51

这些GC调整参数有一些混乱.REE(它是Ruby 1.8.7的一个分支)首先引入了自己的参数,后来Ruby(从1.9.2开始)引入了自己的(类似的)参数.Ruby 1.9.3使它们可以通过环境变量进行定制,Ruby 2.1.0增加了很多.

这篇博文详细介绍了MRI中的垃圾收集以及所有调整变量的含义.

以下是每个Ruby版本的所有调优变量的完整列表:

REE 来源

  • RUBY_HEAP_MIN_SLOTS
  • RUBY_HEAP_SLOTS_INCREMENT
  • RUBY_HEAP_SLOTS_GROWTH_FACTOR
  • RUBY_GC_MALLOC_LIMIT
  • RUBY_HEAP_FREE_MIN

Ruby 1.9.2 代码

(硬编码,但可通过此补丁的环境变量进行自定义)

  • GC_MALLOC_LIMIT
  • HEAP_MIN_SLOTS
  • FREE_MIN

Ruby 1.9.3 源码

  • RUBY_GC_MALLOC_LIMIT
  • RUBY_HEAP_MIN_SLOTS
  • RUBY_FREE_MIN

Ruby 2.0.0 源码

与Ruby 1.9.3相同

Ruby 2.1.0 源码

  • RUBY_GC_HEAP_INIT_SLOTS(废弃RUBY_HEAP_MIN_SLOTS)
  • RUBY_GC_HEAP_FREE_SLOTS(废弃RUBY_FREE_MIN)
  • RUBY_GC_HEAP_GROWTH_FACTOR(新)
  • RUBY_GC_HEAP_GROWTH_MAX_SLOTS(新)
  • RUBY_GC_MALLOC_LIMIT
  • RUBY_GC_MALLOC_LIMIT_MAX(新)
  • RUBY_GC_MALLOC_LIMIT_GROWTH_FACTOR(新)
  • RUBY_GC_OLDMALLOC_LIMIT(新)
  • RUBY_GC_OLDMALLOC_LIMIT_MAX(新)
  • RUBY_GC_OLDMALLOC_LIMIT_GROWTH_FACTOR(新)

Ruby 2.1.1 源码

  • RUBY_GC_HEAP_OLDOBJECT_LIMIT_FACTOR(新)


Den*_*sov 14

来自Ruby 2.1.x http://tmm1.net/ruby21-rgengc/

export RUBY_GC_HEAP_INIT_SLOTS=600000
export RUBY_GC_HEAP_FREE_SLOTS=600000
export RUBY_GC_HEAP_GROWTH_FACTOR=1.25
export RUBY_GC_HEAP_GROWTH_MAX_SLOTS=300000
Run Code Online (Sandbox Code Playgroud)

或这个

# Boost Ruby
export RUBY_GC_HEAP_INIT_SLOTS=1000000 # 1M
export RUBY_GC_HEAP_FREE_SLOTS=500000  # 0.5M
export RUBY_GC_HEAP_GROWTH_FACTOR=1.1
export RUBY_GC_HEAP_GROWTH_MAX_SLOTS=10000000 # 10M
export RUBY_GC_MALLOC_LIMIT_MAX=1000000000    # 1G
export RUBY_GC_MALLOC_LIMIT_GROWTH_FACTOR=1.1
# export RUBY_GC_OLDMALLOC_LIMIT=500000000      # 500M
# export RUBY_GC_OLDMALLOC_LIMIT_MAX=1000000000 # 1G
# export RUBY_GC_OLDMALLOC_LIMIT_GROWTH_FACTOR=1.1
Run Code Online (Sandbox Code Playgroud)

性能MRI Ruby补丁

$ rvm install 2.1.2 --patch railsexpress -n railsexpress
$ rvm --default use 2.1.2-railsexpress
Run Code Online (Sandbox Code Playgroud)