2009-12-03 8 views
14

Ich versuche GC Verhalten für unsere Anwendung zu analysieren (in Tomcat unter Sun Hotspots laufen, JVM 1.6).GC Analyse-Protokolle für Sun Hotspots, JVM 6

Bisher habe ich die JVM Wiesene GC-Logs in eine separate Datei zu emittieren mit ...

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

... und verwendet jstat zur Ausgabe von Protokollen mit ...

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

Ich sehe interessante Informationen, habe aber kein Tool gefunden, mit dem ich diese Protokolle analysieren/visualisieren kann. Ich wurde auf GCViewer von this question verwiesen, aber es analysiert nur einige Protokollzeilen von Gc.log und stürzt dann mit einer Ausnahme ab. Gibt es ein besseres oder aktuelleres Tool zum Parsen dieser spezifischen Protokolle für die spezifische JVM, die ich verwende?

Antwort

3

Ich persönlich verwende HP JMeter für eine Vielzahl von GC-Visualisierung. es funktioniert "ok" bei SUN JRE's und außergewöhnlich gut bei HP's JRE (go figure).

mit Sun HotSpot 1.6 (auf Nicht-HP-Plattformen), ich diese GC-Optionen verwenden, um die Protokolle für die Analyse zu erzeugen:

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

Ich erinnere mich daran, es zu verwenden, aber jetzt HPJmeter scheint nicht kompatibel mit Oracle JRE gc.log –

+0

Ich hatte keine Probleme mit HP-JMeter auf einer beliebigen Version von Oracle neueste JVMs (bis durch 1.7 sowieso) mit den Optionen, die ich oben aufgeführt habe. –

0

Ich habe versucht, Visual GC zu verwenden, aber es scheint, mit einem ID-Prozess zu arbeiten (der jvm one ou jstatd). Ich kann es nicht mit einem jstat.gc verwenden, ich meine eine Datei und kein Stream Ist es richtig?

0

Versuchen Sie mit gchisto (gchisto.dev.java.net). Es kann die GC-Protokollausgabe verstehen (ich bin mir nicht sicher, ob es für die Verwendung mit dem G1 GC aktualisiert wurde). Sie müssen die Quellen von CVS (Sie benötigen ein dev.java.net Konto dafür) und bauen diese selbst

0

Hier ist ein $ 0.00 Log Schaber gut für 1.5 CMS Sammler, die Ihnen eine hohe Ansicht von GC Pausen gibt .

Sie müssen möglicherweise Positionsparameter $ 7 Argument zu der Timestamp-Funktion ändern, um Ihre Protokollzeilensyntax zu entsprechen (my .out wird von Tanuki Wrapper "erweitert").

#! /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 nicht in einigen Jahren aktualisiert, es ist so gut oder schlecht - einige gc Dateien fein arbeiten, bekommen andere Ausnahmen.

IBMs gc-Log Parser in akzeptabler Weise funktioniert, http://www.alphaworks.ibm.com/tech/pmat/faq

Sun hat etwas GCPortal genannt, aber es erfordert:

  • installieren in eine Web-App-Server
  • von awk installieren und Perl
  • Installation eines RDBMS mit einem JDBC-Treiber und Konfiguration
  • und der wahre Killer, Drittanbieter-Grafik/Diagramm-Software tha Früher war es frei und jetzt nicht. Erstaunlich.

gchisto ist gestorben, es gibt nichts mehr im Projekt.

HPJmeter versteht nicht IBM GC-Dateien.

+3

'gcviewer' für jdk 1.6/1.7 wird auf folgender Seite aktualisiert [https://github.com/chewiebug/GCViewer] (http://github.com/chewiebug/GCViewer) – siddagrl