


So analysieren Sie die Heapdump-Datei schnell, nachdem Java sie erhalten hat
Einführung in die Heapdump-Datei
Heap-Dump: Die Heap-Dump-Datei ist eine Binärdatei, die die Verwendung von Objekten im JVM-Heap zu einem bestimmten Zeitpunkt speichert. Die HeapDump-Datei ist eine Momentaufnahme des Java-Stacks zu einem bestimmten Zeitpunkt und eine Art Bilddatei.
Heap-Dump-Fehler (Speicherüberlauf) werden im Allgemeinen aus folgenden Gründen verursacht:
1) Der JVM-Speicher ist zu klein,
2) Das Programm ist nicht streng,
3) Es wird zu viel Müll erzeugt und kann nicht sein recycelt.
Einführung
Nachdem ich das vorherige OOM-Problem überprüft habe, ist das Problem dieses Mal nicht schwerwiegend. Es löst jedoch zum Glück keinen OOM-Alarm aus In der Überprüfung wurde das Dump-Skript zusammengefasst, das bei hoher Heap-Nutzung automatisch jstack und jmap ausführt, sodass wir die problematische Site erfolgreich beibehalten können.
Überprüfen Sie die Heap-Nutzungsverteilung
Nachdem ich die Heapdump-Datei entdeckt hatte, kopierte ich sie sofort auf den lokalen Computer und analysierte sie mit MAT wie folgt:
Offensichtlich scheint es, dass eine Schnittstelle einen sehr großen String zugewiesen hat Objekt, ein String Das Objekt ist etwa 200 MB groß. Wo ist es also zugeordnet?
Finden Sie den Zuweisungsthread für große Objekte
Dieses Zuweisungsverhalten muss von einem bestimmten Thread ausgeführt werden, und der Thread ist der häufigste GC-Root. Sie müssen also nur den GC-Root des Objekts wie folgt finden:
Das große Objekt wurde gefunden. Der entsprechende Zuordnungsthread ist http-nio-8088-exec-6 wie folgt:
Thread-Stapel anzeigen
Wie überprüfe ich, was dieser Thread tut? Nachdem ich eine Weile in MAT herumgesucht hatte, fiel mir ein, dass jstack in unserem Dump-Skript aufgezeichnet war führt eine JSON-Serialisierung durch, aber ich habe sorgfältig nachgesehen. Nach einer Weile wurde der Controller der relevanten Schnittstelle nicht gefunden. Dies liegt daran, dass der Thread die Ausführung der Logik im Controller abgeschlossen hat und dann das große Objekt zurückgegeben hat, das zugewiesen wurde, als die Schnittstelle antwortete die Daten.
Da es jedoch keinen Geschäftscode im Thread-Stack gibt, ist es unmöglich herauszufinden, bei welcher Schnittstelle das Problem auftritt. . .
Schließlich habe ich die problematische Schnittstelle gefunden Wird zum Abfragen von Produktdaten verwendet. Ja, wenn Sie 3 eingeben, werden alle Produkte abgefragt, die mit 3 beginnen, und es sind mehr als 200.000 Daten vorhanden. Die Lösung des Problems ist sehr einfach. Fügen Sie einfach ein Limit hinzu und fertig.
Überprüfung des Fehlerbehebungsprozesses
Suchen Sie den zuvor erwähnten Thread http-nio-8088-exec-6 und erweitern Sie ihn. Sie können den Thread-Stack und die Parameter auf dem Stack wie folgt finden:
Dadurch wird das Request-Parameterobjekt der Anfrage gefunden. Nachdem Sie das Request-Objekt mehrmals erweitert haben, können Sie die Schnittstellen-URL-Informationen wie folgt finden :
VisualVM View Thread Stack
Angesichts der Tatsache, dass viele Schüler es gewohnt sind, VisualVM zum Analysieren von Heapdumps zu verwenden, erfahren Sie hier, wie Sie VisualVM verwenden.
Wählen Sie dann das entsprechende Objekt aus, klicken Sie mit der rechten Maustaste und wählen Sie „In Threads auswählen“ wie folgt aus:
Nachdem Sie den Thread-Stapel gefunden haben, suchen Sie das Anforderungsobjekt, das Sie anzeigen möchten, und klicken Sie zur Eingabe wie folgt:
Erweitern Sie auf ähnliche Weise das Request-Objekt. Danach finden Sie die URL-Informationen wie folgt:
Das obige ist der detaillierte Inhalt vonSo analysieren Sie die Heapdump-Datei schnell, nachdem Java sie erhalten hat. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



Leitfaden zur perfekten Zahl in Java. Hier besprechen wir die Definition, Wie prüft man die perfekte Zahl in Java?, Beispiele mit Code-Implementierung.

Leitfaden für Weka in Java. Hier besprechen wir die Einführung, die Verwendung von Weka Java, die Art der Plattform und die Vorteile anhand von Beispielen.

Leitfaden zur Smith-Zahl in Java. Hier besprechen wir die Definition: Wie überprüft man die Smith-Nummer in Java? Beispiel mit Code-Implementierung.

In diesem Artikel haben wir die am häufigsten gestellten Fragen zu Java Spring-Interviews mit ihren detaillierten Antworten zusammengestellt. Damit Sie das Interview knacken können.

Java 8 führt die Stream -API ein und bietet eine leistungsstarke und ausdrucksstarke Möglichkeit, Datensammlungen zu verarbeiten. Eine häufige Frage bei der Verwendung von Stream lautet jedoch: Wie kann man von einem Foreach -Betrieb brechen oder zurückkehren? Herkömmliche Schleifen ermöglichen eine frühzeitige Unterbrechung oder Rückkehr, aber die Stream's foreach -Methode unterstützt diese Methode nicht direkt. In diesem Artikel werden die Gründe erläutert und alternative Methoden zur Implementierung vorzeitiger Beendigung in Strahlverarbeitungssystemen erforscht. Weitere Lektüre: Java Stream API -Verbesserungen Stream foreach verstehen Die Foreach -Methode ist ein Terminalbetrieb, der einen Vorgang für jedes Element im Stream ausführt. Seine Designabsicht ist

Anleitung zum TimeStamp to Date in Java. Hier diskutieren wir auch die Einführung und wie man Zeitstempel in Java in ein Datum konvertiert, zusammen mit Beispielen.

Kapseln sind dreidimensionale geometrische Figuren, die aus einem Zylinder und einer Hemisphäre an beiden Enden bestehen. Das Volumen der Kapsel kann berechnet werden, indem das Volumen des Zylinders und das Volumen der Hemisphäre an beiden Enden hinzugefügt werden. In diesem Tutorial wird erörtert, wie das Volumen einer bestimmten Kapsel in Java mit verschiedenen Methoden berechnet wird. Kapselvolumenformel Die Formel für das Kapselvolumen lautet wie folgt: Kapselvolumen = zylindrisches Volumenvolumen Zwei Hemisphäre Volumen In, R: Der Radius der Hemisphäre. H: Die Höhe des Zylinders (ohne die Hemisphäre). Beispiel 1 eingeben Radius = 5 Einheiten Höhe = 10 Einheiten Ausgabe Volumen = 1570,8 Kubikeinheiten erklären Berechnen Sie das Volumen mithilfe der Formel: Volumen = π × R2 × H (4

Java ist eine beliebte Programmiersprache, die sowohl von Anfängern als auch von erfahrenen Entwicklern erlernt werden kann. Dieses Tutorial beginnt mit grundlegenden Konzepten und geht dann weiter zu fortgeschrittenen Themen. Nach der Installation des Java Development Kit können Sie das Programmieren üben, indem Sie ein einfaches „Hello, World!“-Programm erstellen. Nachdem Sie den Code verstanden haben, verwenden Sie die Eingabeaufforderung, um das Programm zu kompilieren und auszuführen. Auf der Konsole wird „Hello, World!“ ausgegeben. Mit dem Erlernen von Java beginnt Ihre Programmierreise, und wenn Sie Ihre Kenntnisse vertiefen, können Sie komplexere Anwendungen erstellen.
