Rails 3应用服务器启动时间很长

时间:2010-08-17 13:56:30

标签: ruby-on-rails ruby-on-rails-3 bundler

更新2 这是一个已知的错误/功能,Ruby 1.9.2加载文件的方式。 http://twitter.com/#!/rails/status/72801149769621504

更新这最初是一个问题,但经过一段时间的努力后,我认为它可能无法修复。我想我会发布这个以防万一其他人看到同样的事情,并想知道在rails和bundler里面发生了什么。

其他人是否在他们的Rails 3应用中看到了很长的加载时间?我将计时器放在environment.rb,application.rb,boot.rb和railties / lib / rails / initializable.rb中。时间以秒为单位,经过时间是自上次记录时间以来的时间。生产加载时间需要更长的时间。部分原因是因为硬件较少而且来自eager_load! (也许来自Thin vs Mongrel)。看起来Bundler正占据了大部分的加载时间,我想这是可以预料的。我测试了dev和prod中的一个应用程序,以及dev中的一个空白应用程序。我测试了2个app服务器,看看它是否是Thin导致它。我也看到了与乘客相似的事情(这使得它在2.2.15中无法使用b / c产卵行为)。我对边缘Rails进行了测试,开发中的性能略差14.5秒对14.2秒。如果我删除了我的测试依赖项,它会节省2-3秒,但是当我运行测试时这没有用。我想等待5分钟让我的所有Thin实例重新启动并在测试运行前等待15秒有点烦人,但这是一个可接受的权衡,因为我用Rails 3获得了生产力。如果有人有任何想要帮助加快速度,我全都听见了。以下是测试结果:

注意:我的应用程序在Rails 2.3中在dev中加载不到3秒(虽然我已经将一些代码转换为引擎并添加了haml和twitter_oauth宝石,因为转移到rails3)

**使用Rails 3RC和Ruby 1.9.2rc2进行的所有测试

使用Thin实现 - CentOS 5.5,Rackspace云服务器2GB实例
使用24个gem依赖项测试应用程序#1

start env.rb - Total=0
  start app.rb - 0.00110546 elapsed.  Total=0.001180052  
    start boot.rb - 0.000600488 elapsed.  Total=0.00178644    
    end boot.rb - 0.7935529 elapsed.  Total=0.795507318  
    start require rails/all - 0.000189127 elapsed.  Total=0.795701199  
    end require rails/all - 1.086998364 elapsed.  Total=1.882735263  
    start Bundler require - 0.000109708 elapsed.  Total=1.88285043  
    end Bundler require - 8.955853243 elapsed.  Total=10.838746673  
  end app.rb - 0.062975913 elapsed.  Total=10.901753753  
  # /railties-3.0.0.rc/lib/rails/initializable.rb 
  start run initializers - 0.000145906 elapsed.  Total=10.901910186  
    load_environment_config - 0.116689774 elapsed.  Total=11.018632298  
    initialize_cache - 0.246161343 elapsed.  Total=11.320543397  
    active_record.initialize_database - 0.080047485 elapsed.  Total=11.400961893  
    bootstrap_hook - 1.034189984 elapsed.  Total=12.451309104  
    active_support.initialize_time_zone - 1.969821814 elapsed.  Total=14.448777651  
    action_controller.set_configs - 0.594991537 elapsed.  Total=15.044692126  
    will_paginate.active_record - 0.324460921 elapsed.  Total=15.386837641  
    will_paginate.action_view - 1.904889132 elapsed.  Total=17.328981523  
    add_view_paths - 0.087811847 elapsed.  Total=17.42011881  
    load_init_rb - 0.151282681 elapsed.  Total=17.709093173  
    load_init_rb - 0.362241273 elapsed.  Total=18.071865548  
    load_config_initializers - 0.144051305 elapsed.  Total=18.217433492  
    build_middleware_stack - 2.569453884 elapsed.  Total=20.826842081  
    eager_load! - 4.165919064 elapsed.  Total=24.99280168  
    finisher_hook - 0.48795935 elapsed.  Total=25.480807439  
    repopulate_roles - 0.504085662 elapsed.  Total=25.984901297  
  end run initializers - ~0.00005 elapsed.  Total=25.985617783  
end env.rb - ~0.00006 elapsed.  Total=25.985683903  

Dev with Mongrel - Max OSX 10.5.8,2.66 Core2duo,4GB RAM
使用24个gem依赖项测试应用程序#1

start boot.rb (Bundler.setup) - 2.0e-05 elapsed.  Total=3.1e-05  
end boot.rb (Bundler.setup) - 2.352435 elapsed.  Total=2.352915  
start app.rb - 0.084945 elapsed.  Total=2.437866  
  start require rails/all - 0.000181 elapsed.  Total=2.438049  
  end require rails/all - 0.489425 elapsed.  Total=2.927485  
  start Bundler.require(:default, Rails.env) - 5.6e-05 elapsed.  Total=2.927544  
  end Bundler.require(:default, Rails.env) - 5.16162 elapsed.  Total=8.089177  
end app.rb - 0.025972 elapsed.  Total=8.11516  
start env.rb - 0.084153 elapsed.  Total=8.199329 
  # /railties-3.0.0.rc/lib/rails/initializable.rb 
  start run_initializers - 0.002709 elapsed.  Total=8.202042   
    initialize_cache - 0.089231 elapsed.  Total=8.518005  
    bootstrap_hook - 0.602342 elapsed.  Total=9.192564  
    active_support.initialize_time_zone - 0.901676 elapsed.  Total=10.10115  
    action_controller.set_configs - 0.375864 elapsed.  Total=10.477565  
    will_paginate.active_record - 0.207447 elapsed.  Total=10.694479  
    will_paginate.action_view - 1.041412 elapsed.  Total=11.75974  
    load_init_rb - 0.051938 elapsed.  Total=11.879547  
    load_init_rb - 0.082936 elapsed.  Total=12.001311  
    load_init_rb - 0.18798 elapsed.  Total=12.189555  
    load_config_initializers - 0.079461 elapsed.  Total=12.269971  
    build_middleware_stack - 1.390042 elapsed.  Total=13.729273  
    finisher_hook - 0.082274 elapsed.  Total=13.811648  
    repopulate_roles - 0.350287 elapsed.  Total=14.161941  
  end run_initializers - 3.0e-06 elapsed.  Total=14.177869  
end env.rb - 0.000127 elapsed.  Total=14.178002  

使用Mongrel开发 使用2个gem依赖项测试应用程序#2

start boot.rb (Bundler.setup) - Total=0
end boot.rb (Bundler.setup) - 1.724158 elapsed.  Total=1.724199
start app.rb - 0.041006 elapsed.  Total=1.765211
  start require rails - 0.000151 elapsed.  Total=1.765364
  end require rails - 0.360051 elapsed.  Total=2.125426
  start Bundler.require(:default, Rails.env) - 5.5e-05 elapsed.  Total=2.125485
  end Bundler.require(:default, Rails.env) - 0.008396 elapsed.  Total=2.133889
end app.rb - 0.007805 elapsed.  Total=2.141704
start env.rb - 0.16541 elapsed.  Total=2.307128
  start run_initializers - 0.00031 elapsed.  Total=2.307442
    load_active_support - 0.24045 elapsed.  Total=2.579421
    active_support.initialize_time_zone - 0.206237 elapsed.  Total=2.837663
    action_controller.deprecated_routes - 0.210291 elapsed.  Total=3.048634
    build_middleware_stack - 0.220663 elapsed.  Total=3.273035
  end run_initializers - 3.0e-06 elapsed.  Total=3.29339
end env.rb - 8.7e-05 elapsed.  Total=3.293483

3 个答案:

答案 0 :(得分:2)

由于这是一个相当古老的问题:您是否使用Rails 3的发行版进行了测试?

这是很长一段时间,但最终毫无意义。我的rails应用程序一次可以保持数月,因此只占总运行时间的1%的一小部分。

您是否有Bundler必须处理的大量依赖项?我可以在任何环境下在不到2秒的时间内启动我的Rails 3应用程序,但我使用的第三方宝石很少。

答案 1 :(得分:2)

Bundler经常花费超过一半的时间来使用宝石。您是否在dev / test模式下加载了任何依赖项?例如,我的一些宝石仅供resque工作者或其他脚本使用。您可以添加:require => false,然后在需要时手动需要它们,以便在开发/测试模式下获得适度的启动速度增益。

在这样做之前,我通常会对require语句进行分析(在lib / bundler / runtime.rb中),看看它们是否真的值得一试。

答案 2 :(得分:0)

我有3个rails 3应用程序,我正在从2.3.8迁移一个,rails 2.3.8上的一个在4秒内加载,而在rails 3中途的分支需要12秒,所有其他rails 3个项目从20到30秒加载,当我看到有人在3秒钟内加载他的rails应用程序的截屏时,我非常郁闷,自从我迁移到rails 3之后我一直在拉我的头发3认为这是我的环境。