viernes, marzo 21, 2014

Configurar proceso java para Analizar con Profiling Tool Visual VM






No se si el titulo sea el correcto para lo que voy a explicar, resulta ser que habia generado un proceso batch este batch contenia una serie de operaciones distribuidas en varios Threads lo que me daba resultados satisfactorios, pero este tenia problemas que a simple vista no me daba cuenta hasta que aparecia el mensaje java.lang.OutOfMemoryError: Java heap space despues de 20 a 30 minutos, para saber por que estaba acabando la memoria  el uso del CPU era excesivo utilce el Profiler Visual VM este herramienta si bien no me resolvio el problema,me ayudo a ver de forma local el comportamiento del cosumo de memoria y uso de CPU indicandome que Thread me estaba dando lata pero despues quera utilizarlo desde el servidor remoto donde se encontraba mi proceso para eso realice los siguiente: 
 

Tenia mi .ksh llamado miscript.ksh este contenia la siguiente informacion
 
  #!/bin/ksh

    PATH=/usr/java/jre1.6.0_33/bin:$PATH
   
    export PATH

    CLASSPATH=./EsteEsMiJar.jar

    export CLASSPATH

    PROP_JMX_REMOTE="-Djava.rmi.server.hostname=192.168.1.12 -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9015 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false"

    java -Xms100m -Xmx100m $PROP_JMX_REMOTE  com.elkardumen.core.Server Identificador > /log.txt &

   
   
    Dada esta informacion lo que realmente es necesario para momitorear el comportamiento en el host remoto es la linea:
   
  PROP_JMX_REMOTE="-Djava.rmi.server.hostname=192.168.1.12 -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9015 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false"
   
Tambien es necesario verificar que el puerto este disponible para ser usado , esto lo hacemos con netstat -n| grep 9015,una vez hecho esto solo queda hacer lo siguiente en VisualVM

 Abrimos VisualVM
 Doble click en Remote para introducir la ip del server remoto.

Despues se agregara debajo de Remote la ip correspondiente a el servidor remoto, ahi mismo damos click derecho y saldra el menu para elegir opcion Add JMX Connection

 Mostrara una pantalla donde introducieremos la ip del servidor remoto con el puerto que utilizamos  en la configuracion del .ksh en nuestro ejemplo es 9015.
 Esto agrega debajo de la ip un icono JMX a este le damos click derecho y elejimos Open.
 Y listo mostrara del lado derecho las opciones para visualizar y analizar el proceso
 Pestaña monitor
 Pestaña Threads

Algunas referencias:
http://www.infoq.com/articles/java-profiling-with-open-source
http://visualvm.java.net/profiler.html

No hay comentarios.:

Publicar un comentario