sábado, 8 de noviembre de 2008

Identificación de bugs en la versión 6u6p y workaround

Como indiqué en el post 6u6-p: Pues en Linux x64 peta!!!!!!!, en mis entornos servidor tuve problemas en la versión 6u6p. Tras enviar el feedback a Sun, los ingenieros del Hotspot se pusieron en contacto conmigo e hicimos múltiples pruebas.

El trato ha sido maravilloso, y estoy encantado de haber podido ayudar a identificar el problema, aunque he de decir que ya lo tenían resuelto, je je.

Tras varias semanas, por fin hemos llegado a la conclusión de que se trataba de un problema con el análisis de escape (ver para más información sobre Escape Analysis, ver los posts Allocation, deallocation and escape analysis for Java y ¿Funcionan las optimizaciones sobre el modelo de threading? ), que ya estaba identificado en el bug 6726999 y que han resuelto en la versión 14 de Hotspot, cuyo build 05 por cierto se distribuye con los Early Access del JDK 7 y que está previsto que se incorpore en Java 6 en un update aproximadamente en mayo-junio. Habrá que esperar pues...

He aprendido varias cosas de las interioridades de Hotspot y de versiones, pero tengo otros posts preparados para eso... De momento sólo diré que con el nuevo 6u10 por fin se distribuye Hotspot 11, pero el desarrollo del mismo ya va por la versión 14... Como podréis imaginaros, la evolución a nivel de Hotspot está siendo espectacular aunque tenemos que esperar para ver cada versión en la calle...

Me han pasado también varias versiones del libjvm.so, en concreto versiones "fastdebug" que tracean información de ejecución y compilación, y tiene además toneladas de asserts. Por ejemplo, algunos parámetros de lanzamiento interesantes para las VM fastdebug:
  • -XX:+LogCompilation: para escribir en un fichero hotspot.log y en el especificado arriba información acerca de la compilación binaria en tiempo real
  • -XX:SuppressErrorAt= (por ejemplo -XX:SuppressErrorAt=/xmlstream.cpp:119) para que no se ejecute un cierto assert
A lo que íbamos. Aparte de todo este rollo, el único workaround de momento, si se quiere funcionar con la 6u6p en producción es ejecutarlo con el parámetro de lanzamiento -XX:-DoEscapeAnalaysis. Yo no voy a hacerlo, prefiero seguir con Java 6u07 en producción pero con esa opción habilitada (porque ejecuto bastantes clases compiladas para JDK 1.4, aggg, y está lleno de StringBuffers, que se benefician bastante de los análisis de escape, aunque en Hotspot 10 estén hastante limitados de momento.

Además, dejo una perlita... en toda la interacción con el equipo de ingenieros de Hotspot, me han dado información extraoficial acerca de fechas previstas de liberación de las siguientes actualizaciones de Java 6 y sus correspondencias con versiones de Hotspot. Esto lo publicaré en el siguiente post...

:-)

No hay comentarios: