¿Cómo mejorar el tiempo de carga de jRuby?

Tengo que esperar bastante tiempo (en comparación con las máquinas de mis amigos) para ejecutar scripts en jRuby, especialmente cuando estoy ejecutando pruebas o tareas de rake. He probado la versión 1.3.1 y 1.4.1 de jRuby con y sin la gem ruby-debug y el mismo problema ocurrió en cada configuración.

La pregunta es simple: ¿hay alguna manera de mejorar el proceso de carga de jRuby? ..o tengo algo mal con mi configuración de jvm o con la instalación de jRuby (estoy usando jRuby a través de rvm – ruby ​​version manager)?

Hay un par de cosas que podrías probar:

  • use la versión más reciente y mejor de JRuby (debido a los extensos testsuites, incluso la twig principal de git de vanguardia suele ser bastante estable), están trabajando constantemente en el tiempo de inicio
  • elija su JVM con prudencia, Oracle JRockit, por ejemplo, está orientado a servidores y, por lo tanto, el rendimiento de inicio no es una preocupación (estas aplicaciones solo se reinician una vez cada dos años). Sun ha descuidado el escritorio durante los últimos diez años aproximadamente, pero ha mejorado constantemente desde 1.6u12 (pruebe el 1.6u18 recientemente lanzado) y también en 1.7. El J9 de IBM también se dice que es bastante ligero.
  • intente nailgun, que es un proyecto que mantiene una JVM ejecutándose como un demonio en segundo plano (hay soporte integrado en JRuby, intente ejecutar sus scripts con jruby --ng )
  • simplemente no use JRuby para pruebas unitarias y tareas de rake: el equipo de ThoughtWorks Mingle, por ejemplo, usa MRI para pruebas unitarias, tareas de rake y desarrollo y JRuby para pruebas de integración, pruebas de regresión y producción. (Obviamente, esto solo funciona si no utiliza ninguna biblioteca de Java en sus tareas y pruebas de rake).

Sin embargo, las pruebas y los scripts son el peor escenario para JRuby. El tiempo de ejecución de JRuby solo ya es bastante pesado, mucho más pesado que la RMN. Solo cargar la bestia completa del disco en la RAM puede llevar más tiempo que ejecutar el mismo script en MRI. ¡Y aún no hemos agregado el tiempo de inicio para la JVM!

Además, asegúrese de ejecutar JVM en modo cliente (asumiendo que está usando la JVM de Sun), ya que este modo proporciona un inicio más rápido y un mejor rendimiento general para cosas como suites de prueba. JRuby por defecto debería usar JVM en modo cliente, pero esto depende del sistema y de la configuración de su JVM, etc. Para verificar que está usando JVM del cliente, invoque jruby -v y debería ver algo como esto

 Java HotSpot(TM) *Client* VM 1.6.0_18 

Actualización : Eche un vistazo a la publicación del blog de Charles con consejos para mejorar el inicio: http://blog.headius.com/2010/03/jruby-startup-time-tips.html

Spork podría ayudar, si su unidad de pruebas desea mejorar el tiempo.

JRuby ahora tiene una bandera --dev que combina muchas opciones rápidas. ¡Ejecuté mis pruebas modelo en Rails 5 y JRuby 9.1.7.0 con una mejora de más del 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 

¿No quieres escribir todo esto? Crear un Makefile! Puede agregar -G para incluir el bundle exec

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

Entonces simplemente ejecuta

 $ make tests 

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