Как улучшить время загрузки jRuby? - PullRequest
7 голосов
/ 08 февраля 2010

Мне нужно довольно долго ждать (по сравнению с машинами моих друзей) выполнения сценариев на jRuby, особенно когда я запускаю задачи или тесты rake. Я пробовал jRuby версии 1.3.1 и 1.4.1 с гемом ruby-debug и без него, и в каждой конфигурации возникала одна и та же проблема.

Вопрос прост: Есть ли способ улучшить процесс загрузки jRuby? ... или у меня что-то не так с моей конфигурацией jvm или установкой jRuby (я использую jRuby через менеджер версий rvm - ruby)?

Ответы [ 4 ]

14 голосов
/ 08 февраля 2010

Есть несколько вещей, которые вы можете попробовать:

  • использует самую последнюю и лучшую версию JRuby (из-за обширных тестовых наборов даже ветвь git master обычно довольно стабильна), они постоянно работают во время запуска
  • мудро выбирайте свою JVM, например, Oracle JRockit ориентирован на серверы, поэтому производительность при запуске не беспокоит (в любом случае эти приложения перезапускаются только раз в пару лет), Sun в основном пренебрегала рабочим столом в течение последних десяти лет или так, но стабильно улучшается с 1.6u12 (попробуйте недавно выпущенный 1.6u18), а также с 1.7. Также говорят, что IBM J9 довольно легкий.
  • попробуйте nailgun, проект, который поддерживает JVM в качестве демона в фоновом режиме (в JRuby есть встроенная поддержка, попробуйте запустить свои скрипты с jruby --ng)
  • просто не используйте JRuby для модульных тестов и рейковых задач: команда ThoughtWorks Mingle, например, использует MRI для модульных тестов, рейковых задач и разработки и JRuby для интеграционных тестов, регрессионных тестов и производства. (Очевидно, это работает, только если вы не используете библиотеки Java в своих задачах и тестах rake.)

Однако тесты и сценарии являются худшим сценарием для JRuby. Среда исполнения JRuby сама по себе уже довольно тяжелая, намного тяжелее, чем МРТ. Простая загрузка всего зверя с диска в оперативную память уже может занять больше времени, чем запуск того же сценария в MRI. И мы даже еще не добавили время запуска JVM!

4 голосов
/ 16 февраля 2010

Также убедитесь, что вы запускаете JVM в режиме client (при условии, что вы используете 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

1 голос
/ 29 сентября 2010

spork может помочь, если на его юнит-тестах вы хотите улучшить время.

0 голосов
/ 26 мая 2017

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

...