V8 Javascript Heap-Dump-Schema

8

Ich versuche, den Inhalt eines Heapdump zu verstehen, der von Google Chrome-Tools generiert wird. Ich verstehe, dass es bereits einen In-Browser-Heap-Dump-Inspektor gibt, aber ich bin daran interessiert, eine CLI zu schreiben, die einen JS-Heap-Dump als Übung analysiert. Ich kann keine Dokumente über die Struktur des Inhalts eines Heap-Dumps finden. Sie sind für Menschen lesbar, aber das Format ist nicht sehr klar aus der Inspektion der Datei

Hier ist ein zufälliges Snippet:

%Vor%

Gibt es Dokumente zur Struktur von Chrome-Heap-Dumps? Gibt es ein standardmäßiges Javascript-Heap-Dump-Format oder hat jede Engine ihren eigenen proprietären Standard?

    
Schneems 19.11.2015, 18:44
quelle

1 Antwort

-1

Ausgezeichnete Fragen! Der Reihe nach:

  1. Gibt es Dokumente zur Struktur von Chrome-Heap-Dumps?

Ja! Die Google Entwickler-Dokumentation How zum Aufzeichnen von Heap-Snapshots beschreibt den Inhalt eines Heap-Dumps:

  
  • Konstruktor repräsentiert alle Objekte, die mit diesem Konstruktor erstellt wurden.
  •   
  • Anzahl der Objektinstanzen wird in der # Spalte angezeigt.
  •   
  • Die Spalte Flache Größe zeigt die Summe der flachen Größen aller Objekte an, die von einer bestimmten Konstruktorfunktion erstellt wurden. Die flache Größe   ist die Größe des Speichers, der von einem Objekt selbst gehalten wird (im Allgemeinen Arrays und   Saiten haben größere flache Größen). Siehe auch Objektgrößen .
  •   
  • Größe beibehalten zeigt die maximal beibehaltene Größe unter demselben Objektsatz an. Die Größe des Arbeitsspeichers, der einmal freigegeben werden kann   Objekt wird gelöscht (und seine Abhängigkeiten sind nicht mehr erreichbar)   heißt die beibehaltene Größe. Siehe auch Objektgrößen .
  •   
  • Entfernung zeigt den Abstand zum Stamm mithilfe des kürzesten einfachen Pfads von Knoten an.
  •   

und hier ist der Heap-Dump der Chrome-Entwicklungstools genau dieser Seite, den sie in Tabellenform anzeigen:

Sie werden bemerken, dass das Schema der Struktur der oben zitierten Dokumentation folgt:

  • Entfernung
  • Objekte zählen
  • Flache Größe
  • Zurückgehaltene Größe

Als nächstes haben Sie gefragt:

  1. Gibt es ein Standard-Javascript-Heap-Dump-Format oder tut jede Engine haben ihren eigenen proprietären Standard?

Nein, ab September 2016 gibt es kein Standard-Heap-Dump-Format . Jede Engine hat ihr eigenes Format, da das Heap-Dump-Format jeder Engine ihre Heap-Struktur widerspiegelt, die von ihrem Speicherverwaltungsschema abhängig ist, wie Sie vielleicht vermuten. Beachten Sie jedoch, dass es im Zusammenhang mit der Standardisierung von Dumps für nodejs eine aktive Diskussion gibt - ein offenes Problem auf Github .

  1. Implizierte Frage: Warum ist es schwierig, einen JS Engine-Heap-Dump in ein nettes und übersichtliches DB-Schema zu analysieren?

Weil ES LEBT !!! I.e. das DOM ist flüssig! Es ist eine baumartige Struktur, die sich jederzeit drastisch verändern kann! Jede Fluktuation in den Inhalten Ihres Heap-Dump spiegelt dies wider, und deshalb sind die Profilerstellungs- und Analyse-Dienstprogramme in Chrome Dev Tools so erstaunlich - und so hilfreich!

    
Sensei James 21.09.2016 17:31
quelle