[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Ergonomics en Java 5



Hola,

Acabo de enfrentarme con las nuevas caracterÃsticas de ajuste del
rendimiento de la JVM que incorporà la plataforma J2SE a partir de la
versiÃn 5.0 [1].

Estas caracterÃsticas, conocidas como "ergonomics", consisten en auto
detectar el tipo de mÃquina en la que se ejecuta la aplicaciÃn Java,
para tratar de inferir cuÃles son los valores mÃs adecuados para algunos
parÃmetros como el tamaÃo del heap, el tipo de recolector de basura y el
compilador en tiempo de ejecuciÃn. De esta manera, se pueden delegar
gran parte de los ajustes que antes habÃa que realizar manualmente
mediante las clÃsicas opciones del intÃrprete Java como -Xms, -Xmx,
-XX:MinHeapFreeRatio, -XX:MaxHeapFreeRatio, -XX:NewSize,
-XX:MaxNewSize, etc.

AdemÃs, se ha incorporado el recolector "throughput garbage collector"
que permite una nueva forma de tuning, consistente en especificar el
comportamiento deseado de la plataforma (en tÃrminos de tiempos mÃximos
de pausa y/o el throughput de la aplicaciÃn) y que sea el propio
recolector el que dinÃmicamente ajuste el tamaÃo de las diferentes
generaciones del heap (eden, survivors y tenured) para satisfacer
dichos objetivos.

En la plataforma J2SE 5.0 y superior, los valores por defecto para
mÃquinas de tipo servidor son:

  * Throughput garbage collector
  * TamaÃo inicial del heap de 1/64 de la memoria fÃsica hasta 1GB.
  * TamaÃo mÃximo del heap de 1/4 de la memoria fÃsica hasta 1GB.
  * Java HotSpot Server VM.

Estos valores parecen mucho mÃs apropiados para la ejecuciÃn
de aplicaciones Java tipo servidor que los aplicados por la plataforma
J2SE 1.4.2, con un recolector en serie y un tamaÃo mÃximo del heap de
64MB.

Hay que tener presente que J2SE 5.0 sÃlo considera una mÃquina de tipo
servidor si dispone de 2 o mÃs procesadores fÃsicos y 2GB o mÃs de
memoria fÃsica. Hago este comentario porque curiosamente, mi entorno de
desarrollo (2 CPUs y 4 GB) satisfacÃa estos requisitos, pero no asà la
instancia de Amazon EC2 (1 unidad de proceso EC2 y 1,7 GB) que
estamos usando como entorno de producciÃn.

Para ajustar la JVM en nuestra instancia EC2 finalmente ha sido
necesario usar las siguientes opciones Java [2]:

-server -XX:+UseParallelGC

Por otro lado, he podido probar las capacidades de monitorizaciÃn y
gestiÃn "out-of-the-box" de la JVM [3] basadas en JMX de J2SE 6.0 y
herramientas incluÃdas en el JDK como JStat, JConsole y VisualVM. Me he
llevado muy buena impresiÃn, especialmente de VisualVM [4] y de su
plugin VisualGC [5], que permiten la gestiÃn y monitorizaciÃn remota de
JVMs e incluso realizar profiling bÃsicos.


[1] http://java.sun.com/docs/hotspot/gc5.0/gc_tuning_5.html
[2] http://java.sun.com/javase/technologies/hotspot/vmoptions.jsp
[3]
http://java.sun.com/javase/6/docs/technotes/guides/management/agent.html
[4] https://visualvm.dev.java.net/
[5] http://java.sun.com/performance/jvmstat/visualgc.html

-- 
Rafael Luque Leiva

Orange Soft - http://www.orange-soft.com
Creando software para las personas

UrbanizaciÃn Las CastaÃeras
Arroyo de los Combos, 26 bis
Arroyomolinos, E28939 Madrid
Tel: +34 692 613 639
Fax: +34 916 091 075

GnuPG Key ID: 0x4B9238A2