2009-12-03 9 views
14

Estoy tratando de analizar el comportamiento de GC para nuestra aplicación (que se ejecuta en Tomcat , bajo Hotspots de Sun, JVM 1.6).analizar los registros de GC para Sun Hotspots, JVM 6

Hasta ahora he dado instrucciones a la JVM para emitir registros de GC en un archivo separado usando ...

-Xloggc:gc.log 
-XX:+PrintGCApplicationStoppedTime 
-XX:+PrintGCApplicationConcurrentTime 
-XX:+PrintGC 
-XX:+PrintGCTimeStamps 
-XX:+PrintGCDetails 

... y usados ​​jstat a registros de salida 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 por this question, pero solo analiza algunas líneas de registro de gc.log y luego se bloquea 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?

Respuesta

3

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 GC para producir los registros para el análisis:

-Xloggc:/path/to/vgc/log/location/logfile.vgc --XX:+PrintHeapAtGC 
+0

Recuerdo haberlo usado, pero ahora HPJmeter no parece ser compatible con Oracle JRE gc.log –

+0

No he tenido problemas con HP-JMeter en ninguna versión de las últimas JVM de Oracle (hasta el final) 1.7 de todos modos) usando las opciones que he enumerado arriba. –

0

Intenté usar Visual GC, pero parece que funciona con un proceso de identificación (el primero o el tercero). No puedo usarlo con jstat.gc, me refiero a un archivo y no a una secuencia ¿Es correcto?

0

Pruebe 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). Debe obtener las fuentes de CVS (necesita una cuenta dev.java.net para eso) y compilar esto usted mismo

0

Aquí hay un raspador de registro de $ 0.00 bueno para el recopilador de 1.5 CMS que le ofrece una vista de alto nivel de las pausas de GC .

Es posible que tenga que cambiar el parámetro de posición $ 7 argumento a la función de marca de tiempo 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]; 
    } 
    } 
} 
6

gcviewer no se ha actualizado en un número de años, por lo que es impredecible - algunos archivos GC funcionar bien, otros consiguen excepciones.

analizador de registro GC de IBM funciona aceptablemente, http://www.alphaworks.ibm.com/tech/pmat/faq

Sol tiene algo que se llama GCPortal, pero requiere:

  • instalar en un servidor de aplicación web
  • instalación de awk y perl
  • instalar un RDBMS con un controlador JDBC y la configuración
  • y el programa de gráficos/gráficos real asesino de terceros que Solía ​​ser gratis y ahora no lo es. Increíble.

gchisto ha muerto, ya no hay nada en el proyecto.

HPJmeter no entiende los archivos de IBM gc.

+3

'gcviewer' para jdk 1.6/1.7 se está actualizando en el siguiente sitio [https://github.com/chewiebug/GCViewer](https://github.com/chewiebug/GCViewer) – siddagrl

Cuestiones relacionadas