El inicio de Grails es lento


Ayuda! Estoy portando una gran aplicación ruby a Grails , pero el inicio de Grails de mi aplicación tarda más de 2 minutos.

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

Cuando se inicia, imprime la línea "Ejecución de la aplicación Grails.."y luego se cuelga durante mucho tiempo antes de que luego imprime el Línea "Servidor en ejecución".

Acabo de hacer algo donde migré todas mis identificaciones a Bigints. Eso parece haber empeorado el problema. Ahora tarda unos 10 minutos en iniciarse.

Soy nuevo en grails ¿podría darme algunos detalles más sobre qué y dónde registrar los eventos en startup? En cuanto a la creación de perfiles de la vm, ha sido un par de años desde que hice un montón de Java. ¿Cuál recomienda como la mejor herramienta de perfilado para usar ahora?

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

 28
Author: Bob Herrmann, 2009-12-11

5 answers

Desafortunadamente, no estoy seguro de que se pueda hacer mucho más allá de lo que ya hiciste. Como sabes, hay mucho que hacer cuando se inicia, con toda la resolución / carga del plugin, agregando métodos dinámicos a tus objetos de dominio y la naturaleza dinámica general de Groovy.

No estoy seguro de qué versión está utilizando, pero he pedido la capacidad de desactivar la comprobación de dependencias cuando se inicia en 1.2, ya que eso agrega un montón de tiempo al tiempo de inicio también.

Me doy cuenta arriba no es muy útil, así que tal vez esto sea: 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 algunas construcciones de interfaz de usuario que necesitaba. No lo hice solo por los tiempos de inicio lentos, pero la ventaja es que puedo probar partes del sistema por separado entre sí antes de integrar todo juntos.

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 stubs para los pocos objetos con los que tienen que interactuar desde la aplicación principal. Eso me permite reducir los tiempos de inicio, y también tener mi código mejor aislado.

Así que si es una opción para usted, intente separar las cosas para que pueda trabajar en ellas por separado, lo que aliviará su problema de alguna manera. También puede haber otros beneficios en términos de que su equipo trabaje en componentes más pequeños por separado, mejor modularización, etc.

Espero que esto sea útil.

 10
Author: Jean Barmash,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-12-11 18:45:47

170 clases de dominio es bastante grande, pero 2 minutos todavía me parece muy largo. ¿Tienes un montón de plugins instalados? ¿Configuración de depuración potencialmente demasiado detallada?

Me gustaría saber cuánto tiempo tardó si creó una nueva aplicación grails, copió todos sus objetos de dominio (y el subconjunto de complementos que los objetos de dominio podrían necesitar para operar) y ver cuánto tiempo 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 plugin de dominio, y nuestras otras aplicaciones dependen de ese plugin 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 momento del evento "PluginInstalled" debería ser bueno, ya que creo que el complemento de hibernación sería atrapado por esto, además de los otros complementos.

 3
Author: Ted Naleid,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-12-12 03:56:51

Puede tener un problema de dependencia. Si un plugin que usas se basa en una biblioteca en maven que tiene dependencias 'abiertas', 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 conduciría a un comportamiento poco fiable. Para mí, el culpable es la biblioteca java aws de Amazon, utilizada naturalmente por un complemento que habla con Amazon nube.

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 reciente (y descargando si existe, acabo de notar que 4.2-alpha1 de httpclient se cae cuando corrí esta vez).

Eliminando esa dependencia del plugin y añadiendo manualmente las bibliotecas necesarias a mi .carpeta lib, reduje mi tiempo de inicio de >30sec a

 2
Author: Peter,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-11-03 05:12:02

Es posible que desee ver si hay otras perillas que puede activar que no sean Griales con el fin de solucionar esto.

¿Ha intentado abordar esto como un problema de rendimiento? Puede echar un vistazo al rendimiento de la caja y tratar de averiguar cuál es el cuello de botella. ¿Es CPU? Es un problema de lectura de disco? ¿Puede adjuntar un generador de perfiles a la máquina virtual y averiguar qué está consumiendo la mayor parte de su tiempo de inicio?

 1
Author: jvilalta,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-12-11 23:51:36

¿Ha probado conceptos básicos como estos para su posterior implementación en un contenedor servlet de su elección o en el lugar?¿bootstrapping de guerra?

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

grails run-war

grails war 
 0
Author: n0mer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-08-13 03:17:03