5 de marzo de 2010

Liberada la version 1.0 de las ariadna-tools

Al hilo del artículo anterior sobre goteos de memoria en Java, he compilado la librería JNI de la herramienta ariadna para Mac OS X 10.6, que es la plataforma que habitualmente uso para trabajar.

Ariadna es un profiler de la JVM sencillito que es capaz de volcar todo el contenido del heap cuando se le pide. Despues podemos navegar el contenido del heap a traves de páginas HTML viendo que objetos hay y por quien son referenciados. Es una buena herramienta de bajo nivel para ayudar a depurar goteos de memoria (o "memory leaks", como prefirais).

El proyecto está en Google code, y contiene tambien la página JSP que se cita en el artículo antedicho. Por si quereis echarle un ojo, o descargarlo, os dejo aquí la URL:

http://code.google.com/p/factoria2-tools/downloads/list

Espero que os sea de ayuda. Ya me contaréis los que lo useis que os ha parecido. Y no olvideis que cualquier contribución al proyecto será gratamente aceptada.

5 comentarios:

  1. gracias por el apunte, ahora se que es Ariadna!

    ResponderEliminar
  2. Otra herramienta que se puede usar para analisis de memoria es el JHat, que viene con Java 6, antes proyecto HAT por separado.

    De todas formas, yo el que a veces uso es el YourKit Java Profiler, que no es gratis excepto si lo usas para Open Source que es lo que yo hago. Es más completo y de hecho estoy pensando en pedir que en el trabajo inviertan en una licencia para poder usarlo fuera del proyecto OS.

    PD: Si la memoria vuelve a niveles normales tras un par de GCs, no es un memory leak y a no ser que realmente necesites más memoria que la que tienes, no te puede dar un OOM por que antes de darlo, la JVM intenta liberar toda la memoria que puede a la desesperada. Así que el funcionamiento será lento, consumo de memoria excesivo etc. pero no es "un leak".

    greeneyed

    ResponderEliminar
  3. Me alegra verte por aqui greeneyed.

    En lo de la PD llevas razon, en realidad el GC salta antes siempre. Lo que pasa en que en el caso de Icefaces, como la reserva de memoria es proporcional al numero de threads que lanzas (se guardan cosas en un TLS - clase ThreadLocal en java) si estresas mucho el Tomcat, si se acaba quedando sin memoria, entre lo que pilla de los TLSs, las sesiones, y las requests que tengas en un momento dado procesando en paralelo.

    ResponderEliminar
  4. Es el castigo divino por usar JSF :P. Yo en cambio uso XSLTs, que tiene otros castigos, y la caché que tengo de XSLTs pre-compiladas la tengo utilizando Weak References así que en caso de necesitar memoria a la desesperada, la cache puede vaciarse para poder usar la memoria que ocupa.
    Claro que en este caso, los que tendrían que aplicar esas técnicas serían los de ICEFaces, por que así como lo cuentas, no suena muy escalable si el consumo se dispara tanto con peticiones concurrentes :(.

    ResponderEliminar
  5. Hombre, tanto tanto no es. Se guarda la vista JSF (componentes), el HTML anterior, y algunas cosas mas (en los foros de Icefaces dicen que son, ahora no recuerdo).

    De todas formas, seguire informando, porque el tema sigue pendiente, asi que me tocara hacer mas pruebas. Cuando saque una conclusion medio decente publicare una entrada contandolo.

    Otra cosa es que, aunque estoy de acuerdo en que Icefaces y/o JSF son pesados, tambien es verdad que depende de la aplicacion. Nosotros hemos elegido mantener mucho estado en sesion por la naturaleza de la aplicacion, pero tambien puedes asociar todo a la request y entonces seria mas ligero. Es lo de siempre: a mas comodidad de desarrollo y mantenimiento mas coste de maquina, memoria, etc. Y si te pones a optimizar lo puedes dejar muy ligero, pero entonces la aplicacion se hace mas complicada.

    Y en cuanto a lo de las tecnicas, que las tienen que aplicar los de Icefaces, es verdad. Afortunadamente parece un proyecto bastante vivo y estan trabajando en mejorar el rendimiento. Veremos si consiguen algo viable y sencillo de programar.

    Y ya que mencionas JHat, me baje el viernes otra herramienta de IBM que tiene muy buena pinta. Solo la mire por encima pero me gusto. Es esta:

    http://www.alphaworks.ibm.com/tech/heapanalyzer

    ResponderEliminar