export RUBY_HEAP_MIN_SLOTS=800000
export RUBY_HEAP_FREE_MIN=100000
export RUBY_HEAP_SLOTS_INCREMENT=300000
export RUBY_HEAP_SLOTS_GROWTH_FACTOR=1
export RUBY_GC_MALLOC_LIMIT=79000000
它确实将我的启动时间减少了一半。
现在我想知道为什么这会减少我的启动时间以及这些环境变量的含义是什么?
export RUBY_HEAP_MIN_SLOTS=800000
export RUBY_HEAP_FREE_MIN=100000
export RUBY_HEAP_SLOTS_INCREMENT=300000
export RUBY_HEAP_SLOTS_GROWTH_FACTOR=1
export RUBY_GC_MALLOC_LIMIT=79000000
它确实将我的启动时间减少了一半。
现在我想知道为什么这会减少我的启动时间以及这些环境变量的含义是什么?
RUBY_HEAP_MIN_SLOTS(默认值为10,000)- 堆插槽的初始数量和始终存在的最小插槽数量。 一个堆插槽可以容纳一个Ruby对象。
RUBY_HEAP_FREE_MIN(默认值为4,096)- 垃圾收集器运行后应该存在的空闲插槽数。 如果低于定义的数量,它将根据RUBY_HEAP_SLOTS_INCREMENT和RUBY_HEAP_SLOTS_GROWTH_FACTOR参数分配新插槽。
RUBY_HEAP_SLOTS_INCREMENT(默认值为10,000)- 当使用所有初始插槽时要分配的新插槽数。 第二个堆。
RUBY_HEAP_SLOTS_GROWTH_FACTOR(默认值为1.8)- 用于确定要分配多少新插槽的乘法因子(RUBY_HEAP_SLOTS_INCREMENT *乘法因子)。 对于第3个及以后的堆。
RUBY_GC_MALLOC_LIMIT(默认值为8,000,000)- 触发垃圾收集器之前可以分配的C数据结构的数量。
Ruby垃圾收集器的默认设置未经过Rails优化,而Rails使用大量内存并频繁创建和销毁巨大对象。 最佳值取决于应用程序本身,并且可以在不同设置下分析垃圾收集:http://www.ruby-doc.org/core-2.0/GC/Profiler.html
您还可以使用New Relic、gdb.rb或使用像scrap (https://github.com/cheald/scrap/tree/master)等gem来监视GC。
以下是您可能感兴趣的一些文章:
https://www.coffeepowered.net/2009/06/13/fine-tuning-your-garbage-collector/ http://technology.customink.com/blog/2012/03/16/simple-garbage-collection-tuning-for-rails/ http://snaprails.tumblr.com/post/241746095/rubys-gc-configuration