【问题标题】:How to improve jRuby load time?如何提高 jRuby 加载时间?
【发布时间】:2011-01-14 12:21:56
【问题描述】:

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

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

【问题讨论】:

  • JRuby 的 big-O 时间是否需要像 vanilla YARV 那样糟糕?

标签: ruby performance jvm jruby


【解决方案1】:

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

  • 使用最新最好的 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 重得多。与在 MRI 中运行相同的脚本相比,仅将整个野兽从磁盘加载到 RAM 中已经花费了更长的时间。而且我们甚至还没有添加 JVM 的启动时间!

【讨论】:

    【解决方案2】:

    另外,请确保您在 client 模式下运行 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

    【讨论】:

    • 好点,但它不再正确,因为从 JDK 1.6 开始,所有 64 位 JDK 都忽略了 -client 选项。然而,它的近似值是:-XX:+TieredCompilation -XX:TieredStopAtLevel=1
    【解决方案3】:

    spork 可能会有所帮助,如果您想改进其单元测试时间。

    【讨论】:

      【解决方案4】:

      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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-04-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-08-10
        相关资源
        最近更新 更多