我想知道用于 ruby 1.9.x 的 GC 调整在 2.0 中是否仍然与新的 GC 实现相关。如果是这样,我们可以在新版本上配置什么新东西吗?
我说的是以下设置
RUBY_HEAP_MIN_SLOTS=600000
RUBY_GC_MALLOC_LIMIT=59000000
RUBY_HEAP_FREE_MIN=100000
我想知道用于 ruby 1.9.x 的 GC 调整在 2.0 中是否仍然与新的 GC 实现相关。如果是这样,我们可以在新版本上配置什么新东西吗?
我说的是以下设置
RUBY_HEAP_MIN_SLOTS=600000
RUBY_GC_MALLOC_LIMIT=59000000
RUBY_HEAP_FREE_MIN=100000
关于这些 GC 调整参数有相当多的混淆。REE(它是 Ruby 1.8.7 的一个分支)首先引入了自己的参数,后来 Ruby(从 1.9.2 开始)引入了自己的(类似的)参数。Ruby 1.9.3 使它们可以通过环境变量进行定制,而 Ruby 2.1.0 添加了更多内容。
这篇博文详细介绍了 MRI 中的垃圾收集以及所有调整变量的含义。
以下是每个 Ruby 版本的所有调整变量的完整列表:
稀土源
(硬编码,但可通过此补丁通过环境变量进行自定义)
Ruby 1.9.3源代码
Ruby 2.0.0源代码
与 Ruby 1.9.3 相同
Ruby 2.1.0源码
Ruby 2.1.1源代码
来自 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
或这个
# 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
$ rvm install 2.1.2 --patch railsexpress -n railsexpress
$ rvm --default use 2.1.2-railsexpress