Esta publicación servirá para ir colocando fragmentos de consultas que en algún momento me fueron útiles para usarlo en MongoDB Fragmento 1: Se requería obtener todos los elementos que dentro de un atributo que es de tipo array(arreglo) coincida con type:"fire" Fragmento 2: Se requería actualizar el atributo " lastUpdate " de toda la colección donde la edad sea mayor o igual a 15.
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
Comentarios
Publicar un comentario