java - Analizar registros de GC para Sun Hotspots, JVM 6
garbage-collection logging (7)
¿Has mirado jvisualvm? Viene con el último JDK y le permite ver la JVM. Muestra de salida (usando el plugin visualGC ). Salida de muestra - texto alternativo http://g4u0420c.houston.hp.com/en/5992-4687/img/visualgc_2.png
Estoy tratando de analizar el comportamiento del GC para nuestra aplicación (ejecutándose en Tomcat , bajo Sun''s Hotspots , JVM 1.6 ).
Hasta ahora he instruido a la JVM para que emita registros de GC en un archivo separado usando ...
-Xloggc:gc.log
-XX:+PrintGCApplicationStoppedTime
-XX:+PrintGCApplicationConcurrentTime
-XX:+PrintGC
-XX:+PrintGCTimeStamps
-XX:+PrintGCDetails
... y usó jstat para generar registros utilizando ...
jstat -gc -t 29045 5s > jstat.gc
Estoy viendo información interesante, pero no he encontrado una herramienta que me ayude a analizar / visualizar estos registros. Me apuntaron a GCViewer con esta pregunta , pero solo analiza algunas líneas de registro de gc.log y luego falla con una excepción. ¿Existe alguna herramienta mejor o más actualizada para analizar estos registros específicos, para la JVM específica que estoy usando?
Traté de usar Visual GC, pero parece funcionar con un proceso de identificación (el de JVM o el de JST). No puedo usarlo con jstat.gc, me refiero a un archivo y no a una secuencia. ¿Correcto?
Intenta usar gchisto (gchisto.dev.java.net). Puede comprender la salida de registro de GC (no estoy seguro de si se ha actualizado para funcionar con el GC G1). Tienes que obtener las fuentes de CVS (necesitas una cuenta de dev.java.net para eso) y compilarte tú mismo
Aquí hay un raspador de registro de $ 0.00 bueno para el colector de 1.5 CMS que le da una vista de alto nivel de las pausas de GC.
Es posible que deba cambiar el argumento de parámetro de posición $ 7 a la función de indicación de fecha y hora para que coincida con la sintaxis de la línea de registro (mi .out obtiene "mejorado" por Tanuki Wrapper).
#! /usr/bin/awk -f
# Awk script to parse .out logs and print total of
# stop-the-world GC pause times in ten minute intervals
BEGIN {print "t/timark/tmark/tremark/tfullgc"}
/CMS-initial-mark:/ {
t=timestamp($7);
imark[t] += $(NF-1);
}
//[CMS-concurrent-mark:/ {
t=timestamp($7);
split($(NF-1), b, "/");
# print t" NF="NF" val="b[1];
mark[t] += b[1];
}
/CMS-remark/ {
t=timestamp($7);
remark[t] += $(NF-1);
}
//[Full GC / {
t=timestamp($7);
level=0;
for (i=1; i<=NF; i++) {
if ($i ~ //[/) {
level++;
} else if ($i ~ //]/) {
level--;
}
}
while (level > 0) {
getline;
for (i=1; i<=NF; i++) {
if ($i ~ //[/) {
level++;
} else if ( $i ~ //]/ ) {
level-- ;
}
}
}
if ( $(NF) ~ /secs/]/ ) {
full[t] += $(NF-1) ;
}
}
function timestamp(str) {
split(str, a, ":");
return a[1]":"substr(a[2],0,length(a[2])-1)"0";
}
# print out UK+US trading hours
END {
for (hour = 5; hour <= 16; hour++) {
for (minute = 0; minute <= 59; minute+=10) {
t = sprintf("%02d:%02d", hour, minute);
printf "%s/t%d/t%d/t%d/t%d/n", t, imark[t], mark[t], remark[t], full[t];
}
}
}
Las herramientas disponibles en IBM Support Assistant hacen un muy buen trabajo.
Yo personalmente uso HP JMeter para una gran cantidad de visualización de GC. funciona "bien" en SUN JRE, y excepcionalmente bien en JRE de HP (vaya figura).
Con Sun HotSpot 1.6 (en plataformas que no son de HP), utilizo estas opciones de GC para producir los registros para el análisis:
-Xloggc:/path/to/vgc/log/location/logfile.vgc --XX:+PrintHeapAtGC
gcviewer
no se ha actualizado en un número de años, por lo que es impredecible: algunos archivos de gc funcionarán bien, otros tendrán excepciones.
El analizador de registro de gc de IBM funciona de forma aceptable, http://www.alphaworks.ibm.com/tech/pmat/faq
Sun tiene algo llamado GCPortal, pero requiere:
- instalar en un servidor de aplicaciones web
- instalación de awk y perl
- instalar un RDBMS con un controlador y configuración JDBC
- y el verdadero software de gráfico / gráfico de asesino externo que solía ser gratis y ahora no lo es. Asombroso.
gchisto
ha muerto, ya no hay nada en el proyecto.
HPJmeter no entiende los archivos gc de IBM.