Wikipedia

Resultados de la búsqueda

viernes, 14 de noviembre de 2014

Monitoreo de aplicaciones Java con VisualVM

En esta ocación (y mientras hago la segunda parte del post de entorno de desarrollo) les voy a mostrar cómo monitorear aplicaciones java con una muy buena herramienta incluida en el JDK que se llama VisualVM.

El objetivo de hacer esto es poder obtener estadíasticas de performance y poder detectar posibles problemas de antemano. Por ejemplo haber establecido una cantidad muy pequeña de memoria heap o PermGen y que la aplicación falle miserablemente.


Está de más decir que necesitamos tener instalado el entorno de ejecucución de Java para nuestro S.O.

Si estamos en nuestra pc con RedHat/CentOS/Fedora ejecutamos el  siguiente comando:

$ sudo yum install visualvm

Luego buscamos el programa en nuestro menú de aplicaciones y lo ejecutamos.

Se nos presentará la pantalla que figura más arriba y podremos comenzar a monitorear nuestras aplicaciones java corriendo localmente (Ej, el propio VisualVM).

Now the fun stuff!

Vamos a abrir alguna aplicación Java. Para este ejemplo voy a abrir la IDE NetBeans 8.0.1 con algunos proyectos abiertos.

Volvemos al VisualVM y dentro del nodo local vemos el proceso de NetBeans. Hacemos doble clic para que comienze a mostrarnos los indicadores.

La primer pantalla que se nos presenta es "Overview":

Aquí podremos ver el Id del proceso, los argumentos con los que se inicializó esta VM, la versión de la plataforma y las propiedades del sistema en la pestaña "System properties".

Exiten 4 pestañas más: "Monitor", "Threads", "Sampler" y "Profiler".

Dentro de la pestaña Monitor podremos observar estadísticas de utilización de memoria Heap y PermGen, de utilización de CPU, la cantidad de clases cargadas y los hilos de  ejecución.

La siguiente pestaña "Monitor" es muy interesante:

Aquí se presentan datos clave: La utilización de CPU, tamaño de memoria utilizada, cantidad de clases cargadas y los hilos de ejecución. Si por ejemplo  quisieramos ver si hemos establecido un buen límite de espacio PermGen de memoria podríamos hacer clic en la pestaña PermGen y ver cuál es la utilización de este espacio de memoria mientras nuestra aplicación se ejecuta.
Podemos forzar a que la JVM realice una recolección de basura con el botón "Perform GC".

En la pestaña "Sampler" podemos almacenar datos de funcionamiento de nuestra aplicación para obtener estadísticas de performance sobre los distintos módulos de nuestra aplicación.  Podremos hacerlos  sobre el uso de memoria y CPU.


Aquí podemos incluso ver la performance de ejecución de un método determinado que ejecuta nuestra aplicación y así poder detectar en dónde podríamos estar teniendo problemas de rendimiento.
Obviamente los resultados pueden exportarse para ser analizados más en detalle con posterioridad.

Espero que les haya sido útil esta entrada y que lo disfruten! Hasta la próxima!

jueves, 25 de septiembre de 2014

Cómo montar un entorno de desarrollo Java (Parte 1)

Hola! Después de mucho tiempo sin subir nadas por fin tengo algo de tiempo para armar este tutorial que espero les sea de utilidad.

El tema que voy a tratar en esta ocación es como montar un entorno de desarrollo completo para nuestros desarrollos en Java.

El objetivo de esta guía es mostrarles de la manera más sencilla posible  como configurar e instalar las siguientes aplicaciones:
  • GIT
  • Nexus
  • Maven
  • Jenkins
  • GlassFish Application Server
Manos a la obra entonces! Configuremos ese entorno de desarrollo mediante el uso de aplicaciones de código abierto!


Vamos a partir del supuesto de que tenemos un PC servidor y luego uno o varios equipos clientes o de desarrollo. Vamos a instalar CentOS  7 en el servidor para poder configurar allí toda la infraestructura necesaria. No cubriré la parte de la instalación de CentOS porque seguro ya lo saben hacer, y si no hay muchos tutoriales. La instalación es bastante sencilla.

En nuestro  servidor recién instalado vamos a instalar mediante yum los paquetes del entorno de ejecución de Java y el JDK. También es necesario instalar el repositorio EPEL:

# wget http://dl.fedoraproject.org/pub/epel/beta/7/x86_64/epel-release-7-1.noarch.rpm
# yum install epel-release-7-1.noarch.rpm

Vayamonos empapandonos de conocimientos...

Qué es Nexus?


Nexus es una herramienta que nos permite mantener un repositorio de componentes accesible en nuestro entorno de trabajo. Nos permitirá administrar y compartir los componentes que hayamos creado con todo nuestro equipo de desarrollo. Además actuará como caché de componentes de forma tal de descagar los componentes desde el repositorio central y luego hasta las pc de los desarrolladores por medio de la red local.

Antes que nada es conveniente que creemos un usuario dentro de nuestro CentOS para que sea el responsable de correr el proceso de nexus. Para ello invocaremos el siguiente mando para crear el usuario:

# useradd nexus
# passwd nexus

Escribimos una contraseña supersegura para el usuario y nos loguamos.
Ahora debemos descargar nexus oss del siguiente enlace:

http://www.sonatype.org/nexus/go

Allí elegimos descargar el paquete TGZ. Al momento de este tutorial la version es 2.9.1
Ahora debemos tener un archivo nexus-<version>.tar.gz.
Lo descomprimirmos mediante el mando:

$ tar -zxvf nexus-2.9.1-02-bundle.tar.gz

Ahora tendremos una carpeta nexus-2.9.1-02 en la que están los archivos necesarios para correr la aplicación y los archivos para configurarla.
Dentro de la careta "conf" se encuentra un archivo llamado nexus.properties en el cual podremos configurar el puerto en el cual se ejecute el servicio con la propiedad application-port.

Ahora bien, lo interesante sería que el proceso se inicie con el sistema como servicio, para lo  cual vamos  a crear el siguiente script dentro de /etc/init.d/
#!/bin/bash
#
# nexus: Startup script for Nexus.
#
# chkconfig: 3 80 05
# description: Startup script for Nexus.
 
NEXUS_HOME=/home/nexus/nexus-2.9.1-02;
export NEXUS_HOME
 
NEXUS_OWNER=nexus;
export NEXUS_OWNER
 
start() {
echo -n "Starting Nexus: "
su $NEXUS_OWNER -c "$NEXUS_HOME/bin/nexus start"
sleep 2
echo "done"
}
 
stop() {
echo -n "Stopping Nexus: "
su $NEXUS_OWNER -c "$NEXUS_HOME/bin/nexus stop"
echo "done"
}
 
# See how we were called.
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
*)
echo $"Usage: nexus {start|stop|restart}"
exit
esac

Le damos permisos de ejecución con:

# chmod +x /etc/init.d/nexus

Y finalmente lo agregamos  a los servicios de inicio con:

# chkconfig nexus on

Luego iniciamos el servicio:

# systemctl start nexus

Si ahora nos dirigimos a la siguiente dirección:

http://<ip-server>:8081/nexus

Deveremos poder ver la siguiente pantalla:


Hasta ahora y si han seguido mis indicaciones al pié de la letra estamos en condiciones de afirmar que tenemos nuestro nexus "up and running"!

Por defecto nexus viene configurado con 3 usuarios: anonymous, deployment y admin.
anonymous: tiene permisos de solo lectura
deployment: puede cargar nuevos componentes (los que creemos nosotros, veremos para que sirve esto más adelante)
admin: puede leer y escribir sin restricciones

Pues bien, basta de cháchara, ahora vamos a enfocarnos en GIT:


Qué es GIT?


GIT es un sistema de control de versiones distribuido creado por el famoso Linus Torvalds (no se si les suena ;) ). La diferencia es que lleva el  control de un repositorio local en cada equipo de desarrollador que luego es subido (push) al servidor central. Soporta los conceptos de branch y tags para identificar hitos o fases que va cumpliendo la aplicación que se esté versionando.
En términos generales un desarrollador se conecta al servidor hace un checkout (clone) del fuente del repositorio, hace algunos cambios, hace commit sobre su repositorio local  y luego hace un push para enviar sus cambios al servidor central de  forma tal que los demás desarrolladores puedan realizar  un pull y obtener los últimos cambios.

Vamos a instalar lo siguiente en el equipo de desarrollador GIT:
# yum install -y git

En un día normal un desarrollador modificará y creará nuevos archivos, luego realizará un commit sobre su repositorio local y por último un push al repositorio remoto para que sus cambios estén disponibles para todos los usuarios.

Bueno, esto fue todo para la primera entrega, los espero la próxima para terminar de configurar todo lo prometido!

Hasta la próxima!