Garbage collector tuning in Ruby 2.0 Garbage collector tuning in Ruby 2.0 ruby ruby

Garbage collector tuning in Ruby 2.0


There's a fair bit of confusion about these GC tuning parameters. REE (which is a fork of Ruby 1.8.7) introduced its own parameters first, and later Ruby (starting in 1.9.2) introduced its own (similar) parameters. Ruby 1.9.3 made them customizable via environment variables, and Ruby 2.1.0 added a lot more.

This blog post goes into great detail about garbage collection in MRI and what all the tuning variables mean.

Here's a complete list of all the tuning variables for each Ruby version:

REE source

  • 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 source source

(Hard-coded, but customizable via environment variables with this patch)

  • GC_MALLOC_LIMIT
  • HEAP_MIN_SLOTS
  • FREE_MIN

Ruby 1.9.3 source

  • RUBY_GC_MALLOC_LIMIT
  • RUBY_HEAP_MIN_SLOTS
  • RUBY_FREE_MIN

Ruby 2.0.0 source

Same as Ruby 1.9.3

Ruby 2.1.0 source

  • RUBY_GC_HEAP_INIT_SLOTS (obsoletes RUBY_HEAP_MIN_SLOTS)
  • RUBY_GC_HEAP_FREE_SLOTS (obsoletes RUBY_FREE_MIN)
  • RUBY_GC_HEAP_GROWTH_FACTOR (new)
  • RUBY_GC_HEAP_GROWTH_MAX_SLOTS (new)
  • RUBY_GC_MALLOC_LIMIT
  • RUBY_GC_MALLOC_LIMIT_MAX (new)
  • RUBY_GC_MALLOC_LIMIT_GROWTH_FACTOR (new)
  • RUBY_GC_OLDMALLOC_LIMIT (new)
  • RUBY_GC_OLDMALLOC_LIMIT_MAX (new)
  • RUBY_GC_OLDMALLOC_LIMIT_GROWTH_FACTOR (new)

Ruby 2.1.1 source

  • RUBY_GC_HEAP_OLDOBJECT_LIMIT_FACTOR (new)


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

export RUBY_GC_HEAP_INIT_SLOTS=600000export RUBY_GC_HEAP_FREE_SLOTS=600000export RUBY_GC_HEAP_GROWTH_FACTOR=1.25export RUBY_GC_HEAP_GROWTH_MAX_SLOTS=300000

or this

# Boost Rubyexport RUBY_GC_HEAP_INIT_SLOTS=1000000 # 1Mexport RUBY_GC_HEAP_FREE_SLOTS=500000  # 0.5Mexport RUBY_GC_HEAP_GROWTH_FACTOR=1.1export RUBY_GC_HEAP_GROWTH_MAX_SLOTS=10000000 # 10Mexport RUBY_GC_MALLOC_LIMIT_MAX=1000000000    # 1Gexport 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

Performance MRI Ruby Patch

$ rvm install 2.1.2 --patch railsexpress -n railsexpress$ rvm --default use 2.1.2-railsexpress