2010-02-08 34 views
7

爲了在jRuby上執行腳本,我必須等待相當長的時間(與我的朋友機器相比),尤其是當我運行rake任務或測試時。我試過jRuby版本1.3.1和1.4.1,在沒有ruby-debug gem的情況下,每個配置都出現同樣的問題。如何提高jRuby加載時間?

問題很簡單: 有什麼辦法可以提高jRuby加載過程嗎? ..或我有我的jvm配置或jRuby安裝錯誤(我通過rvm使用jRuby - ruby​​版本管理器)?

+0

是JRuby中的大O時間需要糟糕像[香草YARV(HTTP:/ /www.rubyinside.com/ruby-1-9-3-faster-loading-times-require-4927.html)? – 2011-06-27 02:19:17

回答

14

有一對夫婦的事情,你可以嘗試:

  • 使用最新和最偉大的版本的JRuby的(由於廣泛的測試包,甚至最前沿的Git主分支通常是相當穩定),它們是不斷在啓動時工作
  • 明智地選擇您的JVM,例如Oracle JRockit面向服務器,因此啓動性能不是問題(這些應用程序每隔幾年只能重新啓動一次),Sun主要忽略了在過去十年左右的桌面上,但自1.6u12以來一直保持穩定他最近發佈1.6u18)和1.7。 IBM的J9也被認爲是相當輕量級的。
  • 嘗試nailgun,這是保持一個JVM運行在後臺守護進程的一個項目(存在於JRuby的內置支持,嘗試用jruby --ng運行腳本)
  • 只是不使用JRuby的單元測試和耙任務:ThoughtWorks Mingle團隊使用MRI進行單元測試,Rake任務和開發,以及JRuby進行集成測試,迴歸測試和生產。 (如果您沒有在你的rake任務和測試使用任何Java庫顯然只適用。)

然而,測試和腳本 JRuby的最壞的情況。單獨的JRuby運行時間單獨的已經非常重,比MRI重得多。只需將整個從磁盤加載到RAM中的野獸比在MRI中運行相同的腳本花費的時間更長。我們甚至還沒有爲JVM添加啓動時間!

4

此外,請確保您在客戶端模式 JVM運行(假設你正在使用Sun的JVM),因爲這種模式下提供更快的啓動和喜歡的事情測試套件更好的整體性能。 JRuby的默認情況下應該在客戶端模式下使用JVM,但是這取決於系統和你的JVM設置等。要驗證您正在使用的客戶端JVM,JRuby的調用-v,你應該看到這樣的事情

Java HotSpot(TM) *Client* VM 1.6.0_18 

更新:看看查爾斯的博客文章與技巧,以提高啓動:http://blog.headius.com/2010/03/jruby-startup-time-tips.html

+0

好點,但它不再是真的,因爲在所有的64位JDK上都會忽略JDK 1.6'-client'選項。但是它的近似等價物是:'-XX:+ TieredCompilation -XX:TieredStopAtLevel = 1' – 2016-03-17 15:35:07

1

叉勺可能有幫助,如果你想提高時間

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