Archivo

Entradas Etiquetadas ‘debug’

Usando Visualvm en StupidZombie con Eclipse y OSX: Resultados mixtos

Jueves, 11 de Junio de 2009
StupidZombie memory profile - ping

StupidZombie memory profile - ping

Hoy me decidí a probar VisualVM de Sun (O debería decir Oracle). Bajarselo del sitio web es un paseo y la instalación es trivial (descomprimir, correr y ya). La aplicación a la cual estudié no es más que StupidZombie.

(Si usted tiene Windows entonces quizas no necesite bajarselo ya que viene con la última máquina virtual de Java de Sun).

Correr VisualVM es bastante sencillo, sólo tuve que:

  1. Ejecutar a StupidZombie
  2. Ejecutar a VisualVM (haciendo click en su icono en el directorio bin en donde quedó instalado).

Lo primero que hice fué ver cuanta memoria se estaba comiendo StupidZombie; Una aplicación tan sencilla debería ser liviana y me encontré con que usa sólo 20MB en OSX (Una ridiculez considerando lo que pesan ciertas aplicaciones hoy en día). Sin embargo me soprendió ver que cuando StupidZombie hay más de 5000 mil clases de Java en memoria, (¿porqué tanta basura?).

Esto me hace pensar que es hora de poner a dieta a la aplicación; Por ello me decidí hacer un perfil del uso de memoria (memory profile) y lo dejé corriendo un rato mientras hacia Pings a varios directorios y escribia etiquetas con el generador de etiquetas automático:

StupidZombie and VisualVM

StupidZombie and VisualVM

Mucha creación de arreglos de caracteres. No es soprendente ya que StupidZombie hace mucho “procesamiento” de cadenas de texto, proveniente de los directorios. Sin embargo me gustaría como se porta si lo corro paso a paso desde Eclipse (en mi caso no utilizo NetBeans donde la integración es más natural).

¿Y que sabemos del uso del procesador (CPU)? Bueno, siempre que intentaba cambiar a ese modo la aplicación corria bien un rato y luego se moria, dejandome a un proceso zombie en la máquina (que ironia StupidZombie es ahora un verdadero Zombie :) ):

Nunca pude medir el desempeño del procesador

Nunca pude medir el desempeño del procesador

Por ahora mi opinión de la herramienta es mixta. Si bien es genial que la máquina virtual de Java venga una herramienta de este calibre es también decepcionante que no se pueda medir el desempeño del procesador en OSX.

¿Pero es justa la comparación? Es decir, ¿como se mide en OSX con otras herramientas similares?

Bueno, yo tengo buenas experiencias en mi trabajo con YourKit. Resulta que ellos ofrecen una licencia OpenSource (aunque también tienen una licencia de evaluación de 15 días), así que también me baje esta versión de la herramienta y la probé (primero claro, hubo que hacer ciertos pasos en OSX antes de poder utilizar la herramienta, nada del otro mundo):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
auyan:bin josevnz$ export DYLD_LIBRARY_PATH=/Users/josevnz/Desktop/YourKit_Java_Profiler_8.0.9.app/bin/mac:$DYLD_LIBRARY_PATH
auyan:bin josevnz$ java -agentlib:yjpagent=helpYourKit Java Profiler 8.0.9 JVMTI agent usage: -agentlib:yjpagent=[help]|[option, ...]
 
Option             Description
------------------ ----------------------------------------
port=value       port to listen on (1-65535, by default any free port is chosen)
listen=ip:port same as 'port', but bind agent socket to particular IP only
onlylocal          allow only local connections to profiled application
dir=custom dir   directory where snapshots are created (by default $user home/Snapshots)
telemetrylimit=$n limit telemetry buffer capacity to N hours (approximately)
sampling           startup with CPU sampling
tracing            startup with CPU tracing
                   (cannot be used together with 'disablecounts')
noj2ee             do not perform J2EE high level profiling
                   (use only in combination with 'sampling' or 'tracing')
alloceach=$n      startup with object allocation recording: record each N-th allocation;
                   can be used together with 'allocsizelimit';
                   cannot be used together with 'disablealloc'
allocsizelimit=$b startup with object allocation recording: record objects with size >= B bytes
                   can be used together with 'alloceach';
                   cannot be used together with 'disablealloc'
monitors           startup with monitor usage profiling
usedmem=$percent  capture memory snapshot automatically when used heap memory
                   reaches the threshold
onexit=memory      always capture memory snapshot on exit
onexit=snapshot    always capture performance snapshot on exit (i.e. without heap)
disablealloc       do not instrument bytecode for object allocation recording
disablecounts      do not instrument bytecode for CPU tracing
disablej2ee        do not instrument bytecode for J2EE profiling
disablestacktelemetry
                   do not collect thread stack and status information
quiet              suppress diagnostic messages
 
Please find detailed description in the Help section "Startup options":
http://www.yourkit.com/docs/80/help/additional_agent_options.jsp
 
Examples:
java -agentlib:yjpagent FooClass
java -agentlib:yjpagent=alloceach=10,allocsizelimit=1000000,dir=c:\MySnapshots FooClass
java -agentlib:yjpagent=usedmem=70 FooClass

Bueno, funciona. Ahora corremos a StupidZombie con las opciones de YourKit y la cosa se ve más o menos así:

YourKit profiling StupidZombie

YourKit profiling StupidZombie

1
2
3
4
5
6
auyan:bin josevnz$ java -agentlib:yjpagent -jar ~/Documents/stupidzombie/kenai/dist/StupidZombie.jar 
[YourKit Java Profiler 8.0.9] JVMTI version 3001016a; 1.6.0_07-b06-57; Apple Inc.; mixed mode, sharing; Mac OS X; 64-bit JVM
[YourKit Java Profiler 8.0.9] Profiler agent is listening on port 10001...
[YourKit Java Profiler 8.0.9] *** HINT ***: To get profiling results, connect to the application from the profiler UI
Jun 11, 2009 11:15:24 PM com.stupidzombie.gui.StupidZombieGui main
INFO: Starting...

Hice un montón de pruebas y debo decir que YourKit es una opción mucho más madura que VisualVM. Solo me queda ver si la gente de YourKit me dá una licencia OpenSource para seguirla utilizando en StupidZombie por más de 15 días.

¿Y ustedes, que utilizan para medir el desempeño de sus aplicaciones?

comics, internet, java, kodegeek, linux, opensource, programación, ruby , , ,