usar tutorial example espaƱol como grails

tutorial - El inicio de Grails es lento



grails tutorial (5)

¡Ayuda! Estoy portando una gran aplicación de rubí a Grails, pero el inicio de Grails de mi aplicación lleva más de 2 minutos.

Ya configuré dbCreate para "leer". Me he asegurado de que mi caja de Windows de escritorio de doble procesador de gama alta proporcione la memoria RAM necesaria de Grails (1 Gig). No tengo complementos instalados. Tengo 170 clases de dominio que solían ser ruby.

Cuando se inicia, imprime la línea "Running Grails App ..." y luego se cuelga durante un largo tiempo antes de que imprima la línea "Server running".

Acabo de hacer algo donde migré todos mis identificadores a Bigints. Eso parece haber empeorado el problema. Ahora toma alrededor de 10 minutos para iniciarse.

Soy nuevo en Grails, ¿podría darme algunos detalles más sobre qué y dónde registrar los eventos en el inicio? En cuanto a perfilar el vm, han pasado unos años desde que hice un montón de Java. ¿Qué recomienda como la mejor herramienta de creación de perfiles para usar ahora?

¿Qué más puedo hacer para acelerar el inicio de Grails?


¿Has probado conceptos básicos como estos para un mayor despliegue en un contenedor de servlets de tu elección o en el lugar .war bootstrapping?

grails -Ddisable.auto.recompile=true run-app

grails run-war

grails war


170 clases de dominio son bastante grandes, pero 2 minutos todavía me parecen realmente largos. ¿Tienes un montón de complementos instalados? ¿Potencialmente también la configuración de depuración prolija?

Me gustaría saber cuánto tiempo tardó en crear una aplicación nueva de grails, copiarla en todos sus objetos de dominio (y el subconjunto de complementos que los objetos de dominio podrían necesitar para funcionar realmente) y ver cuánto tarda en comenzar.

La sugerencia de Jean de separar las cosas si es posible es buena. He hecho algo similar en proyectos anteriores donde tenemos un complemento de dominio, y nuestras otras aplicaciones dependen de ese complemento de dominio.

También puede usar los eventos Grails para registrar información de tiempo en el inicio para ver dónde están sus cuellos de botella. El tiempo del evento "PluginInstalled" debería ser bueno, ya que creo que el complemento hibernate sería capturado por esto además de los otros complementos.


Desafortunadamente, no estoy seguro de que se pueda hacer mucho más allá de lo que ya hiciste. Como sabes, están sucediendo muchas cosas cuando se inicia, con toda la resolución / carga de los complementos, la adición de métodos dinámicos a los objetos de tu dominio y la naturaleza dinámica general de Groovy.

No estoy seguro de qué versión está utilizando, pero le pedí la posibilidad de desactivar la comprobación de dependencias cuando inicie en 1.2, ya que eso también agrega un montón de tiempo al inicio.

Me doy cuenta de que lo anterior no es demasiado útil, así que quizás esto sea así: dividí mi aplicación en varios complementos. Uno para objetos de dominio, uno para la capacidad de gráficos, uno para la importación de Excel, otro para algunos constructos de IU que necesitaba. No lo hice solo por los lentos tiempos de arranque, pero la ventaja es que puedo probar partes del sistema por separado el uno del otro antes de integrar todo junto.

Estoy a punto de agregar una nueva funcionalidad que involucra al menos 10 nuevos objetos de dominio, y primero los estoy desarrollando en un complemento separado al tener acceso a los pocos objetos con los que tienen que interactuar desde la aplicación central. Eso me permite reducir los tiempos de inicio y también tener mi código mejor aislado.

Entonces, si es una opción para ti, trata de separar las cosas para que puedas trabajarlas por separado, lo que aliviará tu problema un poco. También puede haber otros beneficios en términos de hacer que su equipo trabaje en componentes más pequeños por separado, una mejor modularización, etc.

Espero que esto sea útil.


Es posible que desee ver si hay otras perillas a las que pueda recurrir además de Grails para solucionar esto.

¿Has tratado de abordar esto como un problema de rendimiento? Puede ver el rendimiento de la caja e intentar descubrir cuál es el cuello de botella. ¿Es CPU? ¿Es un problema de lectura de disco? ¿Puede adjuntar un perfil a la máquina virtual y descubrir qué está consumiendo la mayor parte de su tiempo de inicio?


Puede tener un problema de dependencia. Si un complemento que utiliza se basa en una biblioteca en maven que tiene dependencias de ''final abierto'', Grails irá y buscará cada vez si hay versiones más nuevas para descargar en el rango. No tengo idea de por qué alguien lo especificaría así. Parece que llevaría a un comportamiento poco confiable. Para mí, el culpable es la biblioteca java aws de Amazon, naturalmente utilizada por un complemento que habla con la nube de Amazon.

http://mvnrepository.com/artifact/com.amazonaws/aws-java-sdk/1.2.10

observe cómo algunas de sus dependencias son así

org.apache.httpcomponents httpclient [4.1, 5.0)

parece que cada vez, Grails está buscando una versión más nueva (y descargando si existe, acabo de notar que 4.2-alpha1 de httpclient bajó cuando funcioné esta vez).

Al eliminar esa dependencia del complemento y agregar manualmente las bibliotecas necesarias a mi carpeta .lib, reduje el tiempo de inicio de> 30 segundos a <1 segundo