2010-02-08 8 views
7

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

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

+0

es el momento de orden O de JRuby que requiere malo, como en [YARV vainilla] (http://www.rubyinside.com/ruby-1-9-3-faster-loading-times-require-4927.html)? –

Respuesta

14

Hay un par de cosas que usted puede probar:

  • utilizado la última y mejor versión de JRuby (debido a los extensos bancos de pruebas, incluso el sangrado rama principal git borde suele ser bastante estable), se son constantemente trabajando en el tiempo de inicio
  • elige tu JVM sabiamente, Oracle JRockit por ejemplo está orientado a servidores y por lo tanto el rendimiento de arranque no es una preocupación (esas aplicaciones solo se reinician una vez cada dos años), Sun ha descuidado el escritorio durante los últimos diez años más o menos, pero ha mejorado constantemente desde 1.6u12 (prueba t Recientemente lanzó 1.6u18) y también en 1.7. También se dice que el J9 de IBM es bastante liviano.
  • nailgun intento, que es un proyecto que mantiene una JVM se ejecuta como un demonio en el fondo (no hay soporte nativo en JRuby, intente ejecutar las secuencias de comandos con jruby --ng)
  • simplemente no lo utiliza JRuby para pruebas unitarias y rastrillo Tareas: 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 sólo funciona si no se utiliza ninguna bibliotecas de Java en sus tareas y las pruebas de desprendimiento.)

Sin embargo, las pruebas y scripts son el peor de los casos para JRuby. El tiempo de ejecución JRuby solo ya es bastante pesado, mucho más pesado que MRI. Simplemente cargar toda la bestia del disco en la memoria RAM ya puede tomar más tiempo que ejecutar la misma secuencia de comandos en MRI. ¡Y aún no hemos agregado el tiempo de inicio de la JVM!

4

Además, asegúrese de ejecutar JVM en el modo del cliente (suponiendo que esté utilizando Sun's JVM), 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 utilizar JVM en modo cliente, pero esto depende del sistema y la configuración de JVM, etc. Para verificar que está utilizando JVM de cliente, invocar -v jruby y debería ver algo como esto

Java HotSpot(TM) *Client* VM 1.6.0_18 

actualización: Tome un vistazo a entrada de blog de Carlos con consejos para mejorar el arranque: http://blog.headius.com/2010/03/jruby-startup-time-tips.html

+0

Buen punto, pero ya no es cierto, ya que la opción JDK 1.6 '-client' se ignora en todos los JDK de 64 bits. Sin embargo, su equivalente cercano es: '-XX: + TieredCompilation -XX: TieredStopAtLevel = 1' –

1

spork podría ayudar, si sus pruebas de unidad que desea mejorar el tiempo de

0

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 más del 80% de mejora!

$ 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 desea escribir todo esto? ¡Crea un Makefile!Puede añadir -G incluir bundle exec

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

Entonces sólo tiene que ejecutar

$ make tests 

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

Cuestiones relacionadas