Archivo

Archivo para Miércoles, 24 de noviembre de 2004

Echando código: ¿Como entonar la máquina virtual de Java pasandole parámetros?

Miércoles, 24 de noviembre de 2004

Normalmente la máquina virtual de Java (JVM o Java Virtual Machine) hace un trabajo bastante razonable cuando corremos una aplicación en terminos de velocidad y uso de recursos; Sin embargo la única forma de saber eso por seguro es observando como se porta nuestro programa a través del tiempo.

la JVM cuenta con parametros que afectan su comportamiento, veamos que podemos hacer para mejorar la ejecución de nuestro programa; Suponga por ejemplo que usted escribió un programa para hacer reportes desde la base de datos de ‘Bugzilla‘ en formato XML y que llama a su aplicación en Java así (sólo le muestro el fragmento de código que nos interesa). El programa es un simple programa que corre por la línea de comandos:


SYSTEM_PROPERTIES=”-DBugzillaReport.startdate=${ARGUMENTS[0]} -DBugzillaReport.enddate=${ARGUMENTS[1]} -DBugzillaReport.outputFile=${ARGUMENTS[2]} -DBugzillaReport.configFile=${ARGUMENTS[3]}”

COMMAND=”${JAVA_HOME}/bin/java ${SYSTEM_PROPERTIES} -classpath ${CLASSPATH} com.XXXX.bugzilla.report.CronReporter”

exec $COMMAND



OK, vamos a ver ahora como alterar la llamada del programa para obtener información. Primero veamos cuanto tarda el programa en correr usando la herramienta ‘time’.

COMMAND=”/usr/bin/time -p ${JAVA_HOME}/bin/java ${SYSTEM_PROPERTIES} -classpath ${CLASSPATH} com.XXXX.bugzilla.report.CronReporter”

Corriendolo tenemos:


[josevnz@god josevnz]$ ./BugzillaReport.bsh -s 2004-08-01 -e 2004-11-24 -c /home/josevnz/.BugzillaReport -f test.xml

real 7.04

user 2.80

sys 2.42


¿Que significa todo esto? ‘real‘ es cuanto se tardó el programa en realidad (7.04 segundos), ‘user‘ es cuanto tiempo pasó haciendo trabajo útil mientras que ‘sys‘ es cuanto pasó utilizando recursos del sistema (todo esto es a MUY groso modo). La herramienta ‘time’ nos dá mucha información útil, y le hemos pedido que nos muestre esa información en el formato (p)ortable (POSIX).

Vamos a jugar ahora con las estádisticas del recolector de basura (Garbage Collector). La salida es muy dependiente de la version del JDK que usted esté utilizando:

[josevnz@god josevnz]$ java -version

java version “1.4.2_04

Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2_04-b05)

Java HotSpot(TM) Client VM (build 1.4.2_04-b05, mixed mode)

[josevnz@god josevnz]$

Modificando el script:

SYSTEM_PROPERTIES=”-DBugzillaReport.startdate=${ARGUMENTS[0]} -DBugzillaReport.enddate=${ARGUMENTS[1]} -DBugzillaReport.outputFile=${ARGUMENTS[2]} -DBugzillaReport.configFile=${ARGUMENTS[3]} -verbosegc

Corriendo el programa tenemos:

[josevnz@god josevnz]$ ./BugzillaReport.bsh -s 2004-08-01 -e 2004-11-24 -c /home/josevnz/.BugzillaReport -f test.xml

[GC 478K->128K(1984K), 0.0123790 secs]

[GC 578K->198K(1984K), 0.0096410 secs]

….

[Full GC 2222K->2162K(2892K), 0.0603210 secs]

[GC 2674K->2162K(4180K), 0.0070220 secs]

[GC 2672K->2165K(4180K), 0.0068920 secs]

[GC 2677K->2163K(4180K), 0.0063560 secs]

[GC 2667K->2171K(4180K), 0.0072510 secs]

[GC 2681K->2168K(4180K), 0.0008050 secs]

real 9.61

user 2.92

sys 2.49

El número en rojo es cuanto había antes de correr el GC (Garbage Collector), el número azul es cuanto habia después, el verde es la diferencia entre esos dos valores y el purpura es cuanto tiempo tardó liberando la memoria.

Idealmente deberíamos usar un programita para parsear el archivo, algo como esto:

   1:#!/usr/bin/perl

2:# This program parses the GC log file of a JDK 1.4.2 and generates some stats
3:# Author: Jose V Nunez Zuleta (josevnz@yahoo.com)
4:my %stats;
5:my $count=0.0;
6:open(LOG, $ARGV[0]) || die "$!";
7:while(<LOG>) {
8: $_ =~ /\[GC (.*)K->(.*)K\((.*)K\), (.*) secs\]/;
9: $stats{bytes_freed}+=$3;
10: $stats{time_used}=$4;
11: $count++;
12:}
13:close(LOG);
14:my $average = $stats{bytes_freed} / $count;
15:print ("Bytes freed: $stats{bytes_freed}K ($average)K, Time used in GC: $stats{time_used} secs\n");

La salida sería also asi:

[josevnz@god josevnz]$ tmp/parse_gc_jdk142.pl gc.log

Bytes freed: 65872K (2744.66666666667)K, Time used in GC: 0.0008050 secs

[josevnz@god josevnz]$

Idealmente la JVM debería pasar menos de %5 haciendo GC, %15 y más alla ya es un problema. En nuestro ejemplo: (0.0008050 * %100.0) / 7.2 =~ %0.011181, estamos bien.

Esta aplicación en particular corre muy rápido, además de que no usa casi memoria en la pile (heap) asi que en teoría podríamos decirle a Java que reserve menos memoria al principio y que demore las operaciones del GC lo más posible:

SYSTEM_PROPERTIES=”-DBugzillaReport.startdate=${ARGUMENTS[0]} -DBugzillaReport.enddate=${ARGUMENTS[1]} -DBugzillaReport.outputFile=${ARGUMENTS[2]} -DBugzillaReport.configFile=${ARGUMENTS[3]} -Xms10m -XX:NewSize=5m -Xincgc

Ahora veamos el resultado final:

[josevnz@god josevnz]$ ./BugzillaReport.bsh -s 2004-08-01 -e 2004-11-24 -c /home/josevnz/.BugzillaReport -f test.xml

real 3.73

user 1.93

sys 1.33

[josevnz@god josevnz]$

Nada mal, ¡la mitad del tiempo, sólo con cambiar unos parámetros!

Tenga en cuenta que usted deberá experimentar mucho con su aplicación para obtener estadísticas valederas y que este pequeño articulo es muy informal como para ser tomado en serio (pero si espero haber despertado su curiosidad). Si quiere saber más acerca de este tópico, entonces lea este articulo.

Sin categoría

Echando código: ¿Donde puedo aprender Java, en Español?

Miércoles, 24 de noviembre de 2004



Primero dejeme decirle que Java no es un lenguaje dificil de aprender; El API principal del lenguaje es pequeño y a medida que usted lo utilicé irá descubriendo como usar su API (Application Program Interface). Ahora bien, volverse un maestro de la herramienta le tomará tiempo (pero si usted disfruta programando entonces eso significa que va a pasar un tiempo genial y divertido al frente de la computadora).

OK ¿Y como aprendo a programar? Bueno, primero que nada yo no soy muy amigo de los cursos; El tiempo es limitado y sólo se tocan brevemente puntos engorrosos y si usted ya ha tenido tiempo de rodar, verá que muchas veces los instructores no son precisamente unos expertos.

En mi opinión, estas son sus opciones:

  1. Certifiquese como un Sun Java Certified Developer. El examen es genial?: le mandan una tarea en la cual deberá aplicar principios de programación, buen uso de API y mucho sentido común. No tiene límite de tiempo lo cual le permitirá explorar muchas posibilidades. En mi Blog, en el mes de Julio, yo hablé de mi experiencia certificandome como SCJP, SCJD y SCWCD.
  2. Lea libros. Las series de O’Reilly son geniales. Wrox también tiene libros excelentes sobre el tema. Thinking in Java es un clásico, está en linea y es grátis.
  3. Revise sitios relacionados con el tema. O’Reilly, JavaWorld, The server side, Sun Java.
  4. Participe en un proyecto Open Source. Yo por ejemplo comencé (y aún estoy tramado) con CVEBrowser. También tuve suerte y logre contrbuir código en OpenNMS. ¿Qué ha hecho usted por su comunidad?
  5. Suscribase en una lista de programación en Java. ¿Sabía usted que en Venezuela existe una lista de discusión llamada JavaVen, en la cual se discuten aspectos de programación del lenguaje? La lista cuenta ya con más de 60 miembros y sigue creciendo. Tambien Sun tiene una lista de los famosos “Java user groups“.

Por cierto, esto del aprendizaje de Java me recuerda otras anecdotas en una compañia en la cual trabajé:

  • En un curso de Java, dictado por Sun en el “Java Center” en Caracas, una de las desarrolladoras decidió salir a almorzar con su novio (no mucho tiempo, pues teníamos un receso de 1 hora a lo sumo). Cuando todos regresamos a clases, regresó con las medias rotas y la cara ensangrentada, porque se cayó por unas escaleras tratando de regresar rápido. Después de eso los recesos de almuerzo fueron un poco más largos y ella llevó un yeso al día siguiente :).
  • Cuando comenzamos a trabajar con Java, un día dos de las desarrolladoras llegaron furiosas a mi oficina, reclamando que toda la bibliografía que estabamos ordenando para el proyecto (libros, revistas) estban en Inglés y eso las ponía en desventaja, era injusto. Hoy en día las dos viven en los Estados Unidos, con visa H1B y trabajan sólo con Americanos (traducción: ganas de joder :) ).

¿Tiene alguna experiencia que quiera compartir? Escribala y compartala con otros lectores del Blog.

Sin categoría

Open Source: feliz cumpleaños, !Source Forge cumple 5 años!

Miércoles, 24 de noviembre de 2004



Si, el repositorio más grande de software gratuito, sin el cual muchos proyectos no existirían (como CVEBrowser) ha cumplido 5 años:

Dear SourceForge.net User,


This week SourceForge.net turns five years old. Happy Birthday to us!
The site started 60 months ago with a dream, a small team, and a lot of
sweat equity. At that time, in late 1999, the Internet boom was
raging and VA Linux (now VA Software, our parent company) was just
weeks away of having the most successful IPO in history.

SF.net's mission back then was simple: To provide a vehicle for open
source developers to do what they do best, develop code. VA would
handle all the cost of bandwidth, servers, and tools necessary to
communicate and collaborate. The company at the time was in the Linux
hardware business, and we wanted to give back to the open source
community, which had been so generous to us. With only a handful of
registered developers we made within the company predictions on how
many open source developers were out on the Internet and how many would
use the site. Our high water mark was 5,000 developers. Needless to
say we were a bit off. The viral nature of open source quickly became
apparent when we first opened the site to the public. Since 1999 our
biggest challenge has been trying to stay ahead of the growth curve.

Today we have close to 1,000,000 users and 100,000 projects. The 10Mbps
we used for bandwidth has now grown to 1.6Gbps (including mirrors). Our
five servers have ballooned to more than 80. Our storage requirements
have gone from 10 gigabytes of data to more than 1 terabyte.

!Felicitaciones al equipo de Source Forge por su dedicación y contribución a la comunidad!

Sin categoría

%d personas les gusta esto: