如何提高jRuby加载时间?

时间:2010-02-08 19:14:41

标签: ruby performance jvm jruby

我必须等待很长时间(与我的朋友机器相比)才能在jRuby上执行脚本,特别是在我运行rake任务或测试时。我已尝试使用和不使用ruby-debug gem的jRuby版本1.3.1和1.4.1,并且在每个配置中都出现了相同的问题。

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

4 个答案:

答案 0 :(得分:14)

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

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

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

答案 1 :(得分:4)

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

Java HotSpot(TM) *Client* VM 1.6.0_18

更新:查看Charles的博文,其中包含改善初创公司的提示:http://blog.headius.com/2010/03/jruby-startup-time-tips.html

答案 2 :(得分:1)

spork可能有所帮助,如果它的单元测试你想要缩短时间。

答案 3 :(得分:0)

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