Compilación GeneXus 9.0/Java: problemas de performance
En una KB GeneXus 9.0 grande (en nuestro caso unos 8.100 objetos), ubicada en la red y de uso compartido, la compilación puede tener algunos serios problemas de performance.
Existen dos formas de compilar, y las dos presentan dificultades:
En el caso que analizamos, había un objeto que estaba comparando las fechas más de 1.400 veces... ¡Y ni siquiera era el objeto que había modificado!
Una demora de 2 minutos como teníamos, para compilar un solo objeto modificado baja muchísimo la productividad, no solo por la demora en sí de la compilación, sino también porque la persona que tiene que esperar esos dos minutos casi seguro que se distrae y se pone a hacer alguna otra cosa.
Este problema es conocido, y está reportado en al menos dos SACs:
Este programa ejecuta en el servidor donde está ubicada la KB, y queda monitoreando si hay algún .java modificado. Cuando detecta un .java modificado, lo manda a compilar(1). El programa graba un log que permite monitorear lo que está haciendo y detectar si se produjo algún error en la compilación.
Con esto, el programa ni siquiera necesita que se termine de generar para poder empezar a compilar. Si se están generando varios objetos, a medida que se va terminando de generar uno ya queda listo para compilar.
El efecto es que ahora la compilación es prácticamente instantanea. En condiciones normales (cuando se manda a generar unos pocos objetos), cuando se termina de generar demora menos de dos segundos en terminar de compilar.
(1) En realidad lo que hace es ir guardando los archivos modificados en una cola, y hay otro hilo que va compilando lo que aparece en la cola. Esto permite limitar el número de procesos que se largan a compilar, sin perder ningún archivo en el medio.
Existen dos formas de compilar, y las dos presentan dificultades:
- usando NMake, la compilación es rápida, pero demora mucho cuando tiene que generar algún .mak porque cambió el árbol de llamadas
- usando GXJMake, la generación es rápida, pero la compilación nos demoraba en algunos casos más de 2 minutos.
En el caso que analizamos, había un objeto que estaba comparando las fechas más de 1.400 veces... ¡Y ni siquiera era el objeto que había modificado!
Una demora de 2 minutos como teníamos, para compilar un solo objeto modificado baja muchísimo la productividad, no solo por la demora en sí de la compilación, sino también porque la persona que tiene que esperar esos dos minutos casi seguro que se distrae y se pone a hacer alguna otra cosa.
Este problema es conocido, y está reportado en al menos dos SACs:
- Tiempos de compilación de fuentes java remotos son inviables
- Tiempo de compilación es mayor con GXJMake que con NMAKE (se precisa estar logueado para verlo)
Este programa ejecuta en el servidor donde está ubicada la KB, y queda monitoreando si hay algún .java modificado. Cuando detecta un .java modificado, lo manda a compilar(1). El programa graba un log que permite monitorear lo que está haciendo y detectar si se produjo algún error en la compilación.
Con esto, el programa ni siquiera necesita que se termine de generar para poder empezar a compilar. Si se están generando varios objetos, a medida que se va terminando de generar uno ya queda listo para compilar.
El efecto es que ahora la compilación es prácticamente instantanea. En condiciones normales (cuando se manda a generar unos pocos objetos), cuando se termina de generar demora menos de dos segundos en terminar de compilar.
(1) En realidad lo que hace es ir guardando los archivos modificados en una cola, y hay otro hilo que va compilando lo que aparece en la cola. Esto permite limitar el número de procesos que se largan a compilar, sin perder ningún archivo en el medio.
Hay alguna idea de publicar esto para beneficio de la comunidad ??
ResponderBorrarHola, yo hice tambien mi propio jmake. Se llama magicmake y hasta detecta que queria pedir realmente el usuario, desarrolla el codigo y hasta publica automaticamente todo. Lamentablemente yo tampoco puedo compartirlo a la comunidad, pero es bueno que sepan que existe. Saludos
ResponderBorrarY me podés dar una idea de como hacer un propio Xmake?
ResponderBorrarMarcos, consulta, tienes algun ejemplo del configuration.xml que nos puedas facilitar?
ResponderBorrar