4

我发现这个关于减少 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

它确实将我的启动时间减少了一半。

现在我想知道为什么这会减少我的启动时间以及这些环境变量是什么意思?

4

1 回答 1

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)这样的 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-调整轨道/ http://snaprails.tumblr.com/post/241746095/rubys-gc-configuration

于 2013-08-28T22:52:11.630 回答