我发现这个blog关于减少rails启动时间。
我在bashrc中设置了这些环境变量。
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
它确实将我的启动时间缩短了一半。
现在我想知道为什么这会减少我的启动时间以及这些环境变量意味着什么?
答案 0 :(得分:3)
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)这样的宝石来监控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