heapdump Größe vs hprof Größe
Vor kurzem habe ich ein heapdump im hprof format, wenn mein jboss server läuft mit xms von 4096m und xmx von 4096m und ein permsize der 512m.
Den hprof-Datei generiert, ist über 5gb. Wenn ich das laden der heapdump in visualvm, Matte analyzer oder yourkit, sehe ich nur eine Gesamtzahl von bytes von etwa 1gb. Ich habe versucht, verändert die Erreichbarkeit Umfang in yourkit, aber es zeigt nicht mehr als 1 gb.
Irgendeine Idee, was dieser große Unterschied in der Dateigröße vs angezeigt heapdump Größe verursachen können?
ps: ich verwende jdk1.6.0_23
Leider bin ich nicht Einreichen screenshots hier.
Auf dem Dateisystem, in dem hprof Größe 5.227.659 kb und in yourkit heißt es:
Objekte: 9.738.282 /shallow Größe 740 mb /beibehalten Größe: 740 mb String erreichbar unter Ihnen: 6.652.515 (68%) /shallow Größe: 381 mb (51%) /beibehalten-Größe: 381 MB (51%)
Die größte beibehalten, die Größe ist ein byte[] der 206.810.176
Ich kann keine screenshots hinzufügen, aber ich habe noch die info von yourkit
Daten von YourKit mir nicht weiterhelfen - ich weiß nicht, wie Sie berechnet werden. Ich weiß, wie das in der VisualVM. Wenn Sie mich wollen, um Ihnen zu helfen, die Daten von 'Basic-Info" - Teil (eine Kopie ist im Kontext-Menü) oder Sie können laden Sie Ihre komprimierte heap-dump irgendwo und schickt mir den link.
Hallo Thomas, ich kann nicht versorgen Sie mit den heapdump aufgrund von Sicherheits-Beschränkungen, aber ich kann Sie mit dem Basis-info: aufgenommen am: Fri Jul 20 14:23:43 CEST 2012 Datei: OutOfMemoryProd\20120720-20120723\FOFO1\java_11607_lnx0399vm_201207201423.hprof\java_11607_201207201423.hprof-Datei Größe: 5.147,4 MB Gesamt bytes: 998.064.824 Insgesamt Klassen: 24.457 Instanzen Insgesamt: 10.241.901 Classloadern: 1.728 GC roots: 0 Anzahl der Objekte bis zur Fertigstellung: 0
"GC roots: 0" - das ist sehr verdächtig. Es sieht aus wie es ist etwas falsch mit Ihrem heap-dump.
InformationsquelleAutor Michael | 2012-07-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
welchen Befehl hast du verwendet zum generieren heap dump?
vielleicht muss man live option, nach spec
das ist wirklich eine gute Frage - was ist live-Objekt? ich gehe davon aus, dass live-Objekt ist etwas, dass ist nicht verfügbar für die GC. Also ich denke, die live-option wird nur zum entfernen von garbage-Objekten, und müssen Sie nur die live-Objekte - bedeutet dies nicht, dass dies verringert die Chancen,... ich habe einige memory-leaks kürzlich mit live-Optionen in wirklich riesigen dump (über 16 GB)...
Hallo Andrej, vielen Dank für Ihre Antwort. "Ich habe einige memory-leaks kürzlich mit live-Optionen in wirklich riesigen dump (über 16 GB)" ich kann mir vorstellen, dass es helfen könnte, aber es immer noch nicht den Sinn, warum es so einen großen Unterschied zwischen den hprof Größe auf der Festplatte und die Größe des analyzer-tools angezeigt, wenn ich laden Sie die hprof (heapdump) bei solchen tools...
InformationsquelleAutor Andrey Borisov
Haben Sie versucht, "Unerreichbare Objekte "Histogramm" (Sie finden den link von der Spitze des "Übersicht" - Seite)? In einem meiner heapdumps Größe 1509MB, mat zeigt nur 454MB, aber der rest ist im wesentlichen Müll, und sicher genug, die Summe der "Flachen Haufen" in unerreichbare Objekte Histogramm ist 966MB.
InformationsquelleAutor haridsv
Bedeutet dies einfach, dass die meisten wahrscheinlich, Ihr heap-dump Bestand aus einer großen Menge von Objekte, die nicht erreichbar gewesen wäre, Müll gesammelt, wenn eine GC zu laufen waren.
Nun, das bedeutet nicht, dass du nicht noch ein Leck, es bedeutet nur, dass in Ihrem 5 GB Hprof, 4 GB, Objekte, die unerreichbar waren und daher nicht interessant-Quellen ein Leck.
In Java ein memory leak kann nur auftreten, wenn die Garbage Collection kann nicht sauber ein Objekt, weil irgendetwas hält einen Verweis auf die (unerwartet). So Ihr Leck (falls vorhanden) ist zu finden in der 1 GB-Objekte, die blieb in Ihrem hprof.
InformationsquelleAutor sfali16