Verständnis Java-Heap-dump

Ich habe versucht zu finden ein memory leak in meine Anwendung für eine Woche jetzt ohne Erfolg. Ich habe versucht, einen heap-dump und verwenden Sie jhat Blick auf die dump-und trace-down-Speicher-Leck.

Ist dies eine beste Ansatz? Was ist der beste Weg, um track down der Speicherverlust mit der heap-dump.

Dankbar für Ihre Hilfe.

VM verwendet : java version "1.6.0_25"
Java(TM) SE Runtime Environment (build 1.6.0_25-b06)
Java HotSpot(TM) 64-Bit Server VM (build 20.0-b11, mixed mode)

JVM-Optionen : -Xmx1600m -XX:+UseParallelGC -XX:MaxPermSize=256m -Xms1600m -XX:+HeapDumpOnOutOfMemoryError -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -verbose:gc -Xloggc:/tmp/gc.melden Sie

OOME Stack trace: nicht bekommen Konnte. Der kernel getötet der Prozess mit out-of-memory-Fehler.

GC-Log : Die letzten paar Zeilen

48587.245: [GC [PSYoungGen: 407168K->37504K(476160K)] 506729K->137065K(1568448K), 3.0673560 secs] [Times: user=3.53 sys=0.00, real=3.07 secs] 
50318.617: [GC [PSYoungGen: 444224K->37536K(476416K)] 543785K->175177K(1568704K), 3.6635990 secs] [Times: user=3.70 sys=0.00, real=3.67 secs] 
50453.841: [GC [PSYoungGen: 70092K->2912K(476672K)] 207734K->178513K(1568960K), 1.0164250 secs] [Times: user=1.29 sys=0.00, real=1.02 secs] 
50454.858: [Full GC (System) [PSYoungGen: 2912K->0K(476672K)] [PSOldGen: 175601K->137776K(1092288K)] 178513K->137776K(1568960K) [PSPermGen: 60627K->60627K(74368K)], 2.0082140 secs] [Times: user=2.09 sys=0.00, real=2.01 secs] 
52186.496: [GC [PSYoungGen: 407104K->37312K(444416K)] 544880K->175088K(1536704K), 3.3705440 secs] [Times: user=3.93 sys=0.00, real=3.37 secs] 
53919.975: [GC [PSYoungGen: 444416K->37536K(476608K)] 582192K->213032K(1568896K), 3.4242980 secs] [Times: user=4.09 sys=0.00, real=3.42 secs] 
54056.872: [GC [PSYoungGen: 70113K->2880K(476480K)] 245609K->216320K(1568768K), 0.9691980 secs] [Times: user=1.19 sys=0.00, real=0.97 secs] 
54057.842: [Full GC (System) [PSYoungGen: 2880K->0K(476480K)] [PSOldGen: 213440K->99561K(1092288K)] 216320K->99561K(1568768K) [PSPermGen: 60628K->60628K(72320K)], 2.2203320 secs] [Times: user=2.23 sys=0.01, real=2.22 secs] 
55796.688: [GC [PSYoungGen: 406976K->37504K(476160K)] 506537K->137065K(1568448K), 3.2680080 secs]

Update: Auf die überprüfung der kernel-log-Meldungen, die eine oom-killer. Doch warum ist das system der Tötung der Prozess, ist es nicht, weil der Prozess frisst viele system-Ressourcen ( Arbeitsspeicher ).

stackoverflow.com/questions/6754923/...
Der link spricht abt native code, aber ich werde versuchen mithilfe von jconsole.
Haben Sie versucht, die Verwendung von "print Memory info" in den Verdacht, Teil des Codes? Es kann helfen
Java nicht mehr als die angegebene max-heap-Größe. Sie sollten die max-heap, was auch immer Ihre Anwendung erfordert und dann stellen Sie sicher, dass die server in Frage, das kann sehr viel Arbeitsspeicher auf dem java-Prozess. Ich fügte hinzu, mehr details unten.

InformationsquelleAutor Kathir | 2011-07-20

Schreibe einen Kommentar