如何提高jRuby加载时间?

我必须等待很长时间(与我的朋友机器相比)来执行jRuby上的脚本,特别是在我运行rake任务或测试时。 我试过jRuby版本1.3.1和1.4.1有和没有ruby-debug gem,每个配置都出现同样的问题。

问题很简单:有没有办法改进jRuby加载过程? ..或者我的jvm配置或jRuby安装有什么问题(我通过rvm使用jRuby – ruby​​版本管理器)?

您可以尝试以下几种方法:

  • 使用最新最好的JRuby版本(由于广泛的测试套件,即使是最前沿的git master分支通常也非常稳定),他们一直致力于启动时间
  • 明智地选择你的JVM,例如Oracle JRockit面向服务器,因此启动性能不是问题(这些应用程序每隔几年才重启一次),Sun在过去十年左右主要忽略了桌面,但是自1.6u12(尝试最近发布的1.6u18)以及1.7以来,它一直变得更好。 IBM的J9也被认为非常轻巧。
  • 试试nailgun,这是一个让JVM在后台运行作为守护进程的项目(在JRuby中有内置支持,尝试使用jruby --ng运行脚本)
  • 只是不要使用JRuby进行unit testing和rake任务:例如,ThoughtWorks Mingle团队使用MRI进行unit testing,rake任务和开发,使用JRuby进行集成测试,回归测试和生产。 (这显然只有在rake任务和测试中不使用任何Java库时才有效。)

但是,测试和脚本 JRuby最糟糕的情况。 JRuby运行时已经非常重,比MRI重得多。 将整个野兽从磁盘加载到RAM中只需要比在MRI中运行相同的脚本花费更长的时间。 我们还没有为JVM添加启动时间!

此外,请确保以客户端模式运行JVM(假设您使用的是Sun的JVM),因为此模式可为测试套件等提供更快的启动和更好的整体性能。 默认情况下,JRuby应该在客户端模式下使用JVM,但这取决于系统和JVM设置等。要validation您是否正在使用客户端JVM,请调用jruby -v并且您应该看到类似这样的内容

 Java HotSpot(TM) *Client* VM 1.6.0_18 

更新 :查看Charles的博客文章,了解改善创业的建议: http : //blog.headius.com/2010/03/jruby-startup-time-tips.html

spork可能会有所帮助,如果它的unit testing你想要改善时间。

JRuby现在有一个--dev标志,它结合了许多快速选项。 我在Rails 5和JRuby 9.1.7.0上进行了模型测试,改进了80%以上!

 $ time rspec spec/models Finished in 2.85 seconds (files took 10.63 seconds to load) 86 examples, 0 failures rspec spec/models 57.79s user 1.14s system 288% cpu 20.425 total $ time JRUBY_OPTS=--dev rspec spec/models Finished in 1.4 seconds (files took 4.15 seconds to load) 86 examples, 0 failures JRUBY_OPTS=--dev rspec spec/models 11.51s user 0.48s system 139% cpu 8.600 total 

不想输入所有这些? 创建一个Makefile! 您可以添加-G以包含bundle exec

 # Makefile tests: JRUBY_OPTS='--dev -G' rspec 

然后简单地跑

 $ make tests 

来源: https : //github.com/jruby/jruby/wiki/Improving-startup-time