我们一直试图找出如何通过识别内存饥渴的宝石并寻找替代方案或解决方案来减少我们的rails应用程序的启动内存占用.
但是OS X上有一个我觉得困惑的行为.
使用全新生成的rails app(rails new memoryusage),没有Gemfile,没有模型,没有数据和没有事务,在启动rails c内存OSX显示相应的ruby进程时,每次启动时都会有所不同,从低至60MB到高达65MB,没有可辨别的模式,为什么同一个应用程序可能需要每次执行更少或更多的内存.
我想这必须以某种方式来处理Ruby如何分配内存,但我并不完全清楚为什么它的内存分配会因为相同的代码和变量处理而变化太大.
当我们尝试在Gemfile中的每个gem之后计算进程消耗的内存时,我们有类似的不可预测的行为.我们加载一个vanilla rails进程,然后在rails c我们运行一个解析Gemfile的脚本并分别需要每个Gem,记录需求前后的内存,我们注意到内存占用不仅没有一致性起点,但我们的记忆消耗中的渐进"步骤"变化很大.
我们一个接一个地启动我们的进程三次,并测量每个gem所需的启动内存和增量内存.启动书的记忆足迹不仅在60MB到92MB之间反弹,而且我们在加载每个宝石时看到内存跳跃的点是不一致的 - 有时加载SASS会额外消耗掉 5MB,有时它不会,有时会活跃_merchant会需要额外增加10MB,其他则不需要.
: BOOT UP #1 : BOOT UP #2 : BOOT UP #3
gem : increment | total : increment | total : increment | total
rails : 0.00 | 59.71 : 0.00 | 92.54 : 0.18 | 67.76
unicorn : 0.52 | 60.24 : 0.52 | 93.06 : 3.35 | 71.12
haml : 8.77 | …Run Code Online (Sandbox Code Playgroud)