2009-12-03 12 views
14

Sto cercando di analizzare il comportamento GC per la nostra applicazione (in esecuzione in Tomcat, sotto Hotspot di Sun, JVM 1.6).analizzare i log GC per Sun Hotspot, JVM 6

Finora ho incaricato il JVM per emettere i log GC in un file separato utilizzando ...

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

... e utilizzati jstat a registri di output utilizzando ...

jstat -gc -t 29045 5s > jstat.gc 

Visualizzo informazioni interessanti, ma non ho trovato uno strumento che mi aiuti ad analizzare/visualizzare questi log. Sono stato indirizzato a GCViewer per this question, ma analizza solo alcune righe di log da gc.log e quindi si blocca con un'eccezione. C'è uno strumento migliore o più aggiornato per analizzare questi log specifici, per la JVM specifica che sto usando?

risposta

3

Io personalmente uso HP JMeter per un sacco di visualizzazione GC. funziona "ok" su SUN JRE, e eccezionalmente bene su HP's JRE (vai alla figura).

Con Sun HotSpot 1.6 (su piattaforme non-HP), io uso questi Opzioni GC per produrre i registri per l'analisi:

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

Ricordo di averlo usato, ma HPJmeter oggi non sembra essere compatibile con Oracle JRE gc.log –

+0

Non ho riscontrato problemi con HP-JMeter su alcuna versione delle ultime JVM di Oracle (fino a 1.7 comunque) utilizzando le opzioni che ho elencato sopra. –

0

Ho provato a utilizzare Visual GC, ma sembra funzionare con un processo id (il jvm one o uno jstatd). Non posso usarlo con un jstat.gc, intendo un file e non un flusso È giusto?

0

Provare a utilizzare gchisto (gchisto.dev.java.net). Può capire l'output del registro GC (non sono sicuro che sia stato aggiornato per funzionare con G1 GC). Devi ottenere le fonti da CVS (hai bisogno di un account dev.java.net per questo) e costruisci tu stesso

0

Ecco un raschietto di $ 0,00 buono per 1,5 collezionista CMS che ti offre una vista di alto livello delle pause GC .

Potrebbe essere necessario modificare l'argomento del parametro $ 7 sulla funzione timestamp per far corrispondere la sintassi della linea di registro (my .out viene "enhanced" da 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 non è stato aggiornato in un certo numero di anni, quindi è colpito o perdere - alcuni file GC funzionano bene, altri si eccezioni.

parser registro gc IBM funziona accettabilmente, http://www.alphaworks.ibm.com/tech/pmat/faq

Sole ha qualcosa chiamato GCPortal, ma richiede:

  • installare in un server web app
  • installazione di awk e perl
  • installazione di un RDBMS con un driver JDBC e configurazione
  • e il vero killer, software grafico/grafico di terze parti che t era gratuito e ora non lo è. Incredibile.

gchisto è morto, non c'è più nulla nel progetto.

HPJmeter non riconosce i file gc di IBM.

+3

'gcviewer' per jdk 1.6/1.7 è in fase di aggiornamento nel seguente sito [https://github.com/chewiebug/GCViewer](https://github.com/chewiebug/GCViewer) – siddagrl